先展示,第一次解决该题目时的初步算法
/**
* 人机斗拳(用户输入、电脑随机生成1-3的数字、)
* @return 1(人赢了) 2(电脑赢) 3(平局)
*/
private int fightPC() {
// TODO Auto-generated method stub
System.out.println("\n 1.石头 \t 2.剪刀\t 3.布" + "---请输入选项对应数字");
int resualt = -1 ;
int numC = (int)(Math.random() * 3 + 1) ; //随机生成1-3 的数字
for ( boolean flag_4 = false ; !flag_4 ;) { //不是1-3的数字就循环
int numP = isNum() ; //获得一个数字
//比较人机出拳
if( numP >= 1 && numP <= 3 ){
if ( numC == numP ){ //相同,平局
resualt = 3 ;
System.out.print("\n你和电脑出拳一样 \t");
break ;
}
else if ( numC == 1 ){ //电脑出石头
System.out.print("\n电脑出石头 \t");
if (numP == 2){
resualt = 2 ;
}
else if(numP == 3){
resualt = 1 ;
}
}
else if ( numC == 2 ) { //电脑出剪刀
System.out.print("\n电脑出剪刀 \t");
if( numP == 1){
resualt = 1 ;
}
else if ( numP == 3){
resualt = 2 ;
}
}
else if ( numC == 3) { //电脑出布
System.out.print("\n电脑出布 \t");
if ( numP == 1){
resualt = 2 ;
}
else if ( numP == 2) {
resualt = 1 ;
}
}
flag_4 = true ;
}
else {
System.out.println("请输入正确的数字!");
}
}
return resualt;
}
为了完成这功能,当时我的算法好繁冗啊,不忍直视呀。
下面是我思考简化后的代码,诸君请品尝。
/**
* @function 玩家输入数字,电脑随机生成1-3 的数字,
* @return 1(人赢) 2(电脑赢) 3 (平局)
*/
private int fightNum() {
int resualt = -1 ;
//玩家输入
System.out.println("1、剪刀\t2、石头\t3、布");
int chooseP = isNum(1, 3 ) ;
//电脑随机生成数字
int chooseC = (int)(Math.random() * 3 + 1);
//判断谁赢
if ( chooseP - chooseC == 1){
resualt = 1 ;
}
else if ( chooseP - chooseC == 2) {
resualt = 2 ;
}
if (chooseC - chooseP == 1){
resualt = 2 ;
}
else if ( chooseC - chooseP == 2) {
resualt = 1 ;
}
if ( chooseP == chooseC ){ //平局
resualt = 3 ;
}
System.out.println("\t 电脑 选择了 " + chooseC);
return resualt;
}