m0_71456416 2022-06-08 03:03 采纳率: 100%
浏览 50
已结题

猜数字游戏中的while循环最后一次结果为什么会出现两次

import java.util.Scanner;
import static 随机数02.Random.useRandom;
import static 随机数02.Replay.useReplay;
public class RandomDemo02 {
public static void main(String[] args) throws EnumConstantNotPresentException {
while (true) {
System.out.println("欢迎来到猜数字游戏");
System.out.println("A.开始新游戏");
System.out.println("B.开始自定义游戏");
System.out.println("C.退出");
System.out.println("请输入你的选择:");
try {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
switch (line) {
case "A":
useReplay();
break;
case "B":
useRandom();
break;
case "C":
System.out.println("谢谢使用");
System.exit(0);//JVM退出:java虚拟机退出
default:
System.out.println("你输入的数据不合规");
}
}catch (EnumConstantNotPresentException e){
System.out.println("你该不会输入了其他的东西吧,请重新输入一下");
e.constantName();
}
}
}
}
import java.util.Random;
import java.util.Scanner;
public class Replay extends CompareNumber{
static int rounds01 = 0;//初始化轮数
public static void useReplay() throws EnumConstantNotPresentException {
AO:while (true) {
Random r = new Random();
int number = r.nextInt(3) + 1;
int count01 = 1;//初始化while记录的次数
useCompareNumber(rounds01,count01,number);

            BO:while (true) {
                System.out.println("请选择下列操作:");
                System.out.println("A.重新开始  B.结束游戏  C.继续游戏");
                Scanner sc = new Scanner(System.in);
                String line = sc.nextLine();
                    switch (line) {
                        case "A":
                            rounds01 = 0;
                            useReplay();
                        case "B":
                            rounds01 = 0;
                            System.out.println("本次游戏结束");
                            System.out.println("\r\t");
                            break AO;
                        case "C":
                            rounds01++;
                            break BO ;//结束操作循环BO,再次进入AO循环
                        default:
                            System.out.println("你输入的数据不合规");
                    }
            }
        }
    }
}

import java.util.Scanner;
public class CompareNumber {
public static void useCompareNumber(int rounds666,int count666,int number666){
while (true) {
System.out.println("[当前为第" + (rounds666 + 1) + "轮]");
System.out.println("请输入你要猜的数字:");
Scanner sc = new Scanner(System.in);
if (sc.hasNextInt()) {//判断是否是该类型数据,返回true或者false
int guessnumber = sc.nextInt();
System.out.println("当前猜了(" + count666 + ")次");
if (guessnumber < number666) {
System.out.println("猜的数字比真实数字小");
} else if (guessnumber > number666) {
System.out.println("猜的数字比真实数字大");
}
if (guessnumber == number666) {
System.out.println("恭喜你猜中了");
break;
}
count666++;//记录while循环次数//猜的次数
} else {
System.out.println("请输入数字,别输入字符或字符串");
}
}
if (count666 < 7 && count666 >= 2) {
System.out.println("共猜了" + count666 + "次," + "哎呦,不错哟");
} else if (count666 >= 7 && count666 < 12) {
System.out.println("共猜了" + count666 + "次," + "还行还行");
} else if (count666 >= 12) {
System.out.println("共猜了" + count666 + "次," + "继续加油");
} else if (count666 == 1) {
System.out.println("共猜了" + count666 + "次," + "厉害");
}
}
}

请选择下列操作:
A.重新开始 B.结束游戏 C.继续游戏
A
[当前为第1轮]
请输入你要猜的数字:
2
当前猜了(1)次
恭喜你猜中了
共猜了1次,厉害
请选择下列操作:
A.重新开始 B.结束游戏 C.继续游戏
B
本次游戏结束

本次游戏结束

每次点了重新开始再去点结束游戏,就会出现两次结果“本次游戏结束”
本想只出现一次的,不知道为啥会出现两次

  • 写回答

1条回答 默认 最新

  • a5156520 2022-06-08 09:37
    关注

    应该是因为Replay类里面的useReplay()方法的case "A" 没有加break语句,当输入A调用useRepaly()方法(此处是递归),进入AO处,重新开始玩了一局猜数后,再进入BO处,打印重新操作菜单,然后获取一个输入“B”, 程序打印“本次游戏退出”,然后再返回递归的下一步,因为case "A"没有break, 就会继续执行到case "B",所以会再次打印一个“本次游戏退出”。如果你使用的是IDE ,可以打断点一步步调试一般可以发现问题出在哪里。
    在case "A"那里加一个break,就可以了。

    package 随机数02;
    import java.util.Random;
    import java.util.Scanner;
    public class Replay extends CompareNumber{
        static int rounds01 = 0;//初始化轮数
        
        public static void useReplay() throws EnumConstantNotPresentException {
            AO:while (true) {
            Random r = new Random();
            int number = r.nextInt(3) + 1;
            int count01 = 1;//初始化while记录的次数
            useCompareNumber(rounds01,count01,number);
            
            BO:while (true) {
                System.out.println("请选择下列操作:");
                System.out.println("A.重新开始  B.结束游戏  C.继续游戏");
                Scanner sc = new Scanner(System.in);
                String line = sc.nextLine();
                    switch (line) {
                        case "A":
                            rounds01 = 0;
                            useReplay();
                            break;
                        case "B":
                            rounds01 = 0;
                            System.out.println("本次游戏结束");
                            System.out.println("\r\t");
                            break AO;
                        case "C":
                            rounds01++;
                            break BO ;//结束操作循环BO,再次进入AO循环
                        default:
                            System.out.println("你输入的数据不合规");
                    }
                 }
              }
            }
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月8日

悬赏问题

  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来