loveairbluesky 2015-08-18 07:02 采纳率: 100%
浏览 2984
已采纳

新手,编写的java人机猜拳小游戏,大家帮忙看看

运行的时候,要求只能输入0,1,2,如果输入其他则提示重新输入。但是如果输入错误的再重新输入正确的时候,输赢判断会有错误,这是什么原因啊?请高手指导

import java.util.*;
public class F2 {
public static void main(String[] args) {
System.out.println("*************************");
System.out.println("*\t人机猜拳游戏\t*");
System.out.println("*************************");
Game game=new Game();
game.play();
game.showReasult();
}
}

class Person{

int score=0;

public int showQ1(){
    System.out.println("请出:0-石头、1-剪刀、2-布");
    Scanner sc=new Scanner(System.in);
    int Q1=sc.nextInt();
    if(Q1==0||Q1==1||Q1==2){
        switch(Q1){
        case 0:System.out.println("你出的是石头");break;
        case 1:System.out.println("你出的是剪刀");break;
        case 2:System.out.println("你出的是布");break;
        }
    }else{
        System.out.println("输入有误,请重新输入!");
        Person ps=new Person();
        ps.showQ1();
    }
    return Q1;
}

}

class Computer{

int score=0;

public int showQ2(){
    int Q2=new Random().nextInt(3);
    switch(Q2){
    case 0:System.out.println("电脑出的是石头");break;
    case 1:System.out.println("电脑出的是剪刀");break;
    case 2:System.out.println("电脑出的是布");break;
    }
    return Q2;
}

}

class Game{

int count=0;
int countQ=0;

Person ps=new Person();
Computer cp=new Computer();

public void play(){

    System.out.println("是否开始游戏?  (y/n)");
    Scanner sc1=new Scanner(System.in);
    String ans1=sc1.next();
    if(ans1.equals("y")){
        String ans2;
        do{
            int Q1=ps.showQ1();
            int Q2=cp.showQ2();
            if((Q1==0&&Q2==1)||(Q1==1&&Q2==2)||(Q1==2&&Q2==0)){
                System.out.println("赢");
                ps.score++;
            }else if((Q1==0&&Q2==0)||(Q1==1&&Q2==1)||(Q1==2&&Q2==2)){
                System.out.println("平");
                countQ++;
            }else if((Q1==0&&Q2==2)||(Q1==1&&Q2==0)||(Q1==2&&Q2==1)){
                System.out.println("输");
                cp.score++;
            }
            count++;
            do{
                System.out.println("是否继续? (y/n)");
                Scanner sc2=new Scanner(System.in);
                ans2=sc2.next();
            }while(!ans2.equals("y")&&!ans2.equals("n"));
        }while(ans2.equals("y"));
    }else if(ans1.equals("n")){
        //System.out.println("游戏结束");
    }else{
        System.out.println("输入有误请重新输入!");
        Game game=new Game();
        game.play();
    }
    System.out.println("游戏结束!");

}

public void showReasult(){
    System.out.println("*************************");
    System.out.println("*\t游戏结果为:\t*");
    System.out.println("*\t对战次数:"+count+"次\t*");
    System.out.println("*\t平局:"+countQ+"次\t\t*");
    System.out.println("*\t你赢得:"+ps.score+"次\t\t*");
    System.out.println("*\t电脑赢得"+cp.score+"次\t\t*");
    System.out.println("*************************");
}

}

  • 写回答

3条回答 默认 最新

  • ztt2dd2 2015-08-18 07:48
    关注

    更改 showQ1方法如下,你的返回逻辑不对
    public int showQ1(){
    System.out.println("请出:0-石头、1-剪刀、2-布");
    Scanner sc=new Scanner(System.in);
    int Q1=sc.nextInt();
    if(Q1==0||Q1==1||Q1==2){
    switch(Q1){
    case 0:System.out.println("你出的是石头");break;
    case 1:System.out.println("你出的是剪刀");break;
    case 2:System.out.println("你出的是布");break;
    }
    return Q1;
    }else{
    System.out.println("输入有误,请重新输入!");
    Person ps=new Person();
    return ps.showQ1();
    }

    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持