这是小弟自己写的java猜数字小游戏,可是最後怎麼样都不会再猜错5次后结束,想请大神知道一下到底错在哪里
Scanner s1 = new Scanner(System.in);
int ran, input = 0, n = 0, x = 1, y = 100;
System.out.println("请输入一个1-100内的数字,你一共有5次机会");
System.out.println(x + "-" + y + "===>");
ran = (int) (Math.random() * 100) + 1;
do {
input = s1.nextInt();
for (; n <= 5; n++) {
if (input > 100 || input < 1) {
System.out.println("你输入的数字超过1-100的范围请重新输入");
break;
}
if (input > ran) {
y = input;
System.out.println("猜大了");
System.out.println(x + "-" + y + "===>");
break;
}
if (input < ran) {
x = input;
System.out.println("猜小了");
System.out.println(x + "-" + y + "===>");
break;
}
}
} while (ran != input);
System.out.println("已经" + n + "次");
System.out.println("你好笨,都猜错了!");
if (ran == input) {
System.out.println("恭喜你,你猜对了!");
System.out.println("你一共猜了" + n + "次");
return;
}
}
}
顺道麻烦大神们 可以指导小弟,为这麼这麼写有错,以及如何修改,还有如此修改的原因,谢谢大神
另外小弟是刚学java 展开
2017-05-23 · 做品质教育,用事实说话
这段程序有这么几个问题:
语法报错,编译不能通过,不能通过的原因是:
for (n=0; n <= 5; n++) 被您写成了for (; n <= 5; n++)
随机数的产生:您是想产生一个1~100之间的整数,用Math.random()是可以的,但是
应该,ran = (int) (Math.round(Math.random() * 99)) + 1; 乘以100的话,最大数越界了,具体请参考Math.round的详解,如果看不懂这个解释,可以编写一个测试方法测试
思路的问题,外层do..while循环里面,就是控制循环是否执行,里面就不要再嵌套for循环了,难道每次执行do..while循环的时候,你都想再判断5次?正确的思路:
设置是否猜对的布尔值 flag=false; //默认没猜对
do{
//1.获取键盘输入
//2. 比较数据,如果猜对了flag=true
//3. 次数计数器+1
}while(循环执行的条件:次数计数器<=5 &&数字没匹配对 即flag=false )
当跳出循环时候有两种情况,第一种情况次数>5,第二种,匹配对了(flag=true),可以在循环的时候设置一个布尔变量(flag),初始值为false,如果匹配对了,这个布尔变量(true),跳出循环的时候就根据这个布尔变量的值来判断是否曾经在循环体内匹配对了