Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的while循环会冻结我的程序,如何修复它?_Java_If Statement_While Loop - Fatal编程技术网

Java 为什么我的while循环会冻结我的程序,如何修复它?

Java 为什么我的while循环会冻结我的程序,如何修复它?,java,if-statement,while-loop,Java,If Statement,While Loop,我对Java非常陌生,有一个问题。我的程序是一个简单的电脑猜谜游戏。如果你猜对了,那么你的分数会上升1。如果你猜错了,那么你的分数会减少1。如果你得到7或0,那么你赢/输。你能帮我理解为什么它不会循环回while语句的起始位置吗? 谢谢 import java.util.Random; 导入java.util.Scanner; 导入java.lang.Math; 导入java.io.*; 课堂随机游戏{ 公共静态void main(字符串str[])引发IOException{ 扫描仪扫描=新扫

我对Java非常陌生,有一个问题。我的程序是一个简单的电脑猜谜游戏。如果你猜对了,那么你的分数会上升1。如果你猜错了,那么你的分数会减少1。如果你得到7或0,那么你赢/输。你能帮我理解为什么它不会循环回while语句的起始位置吗? 谢谢

import java.util.Random;
导入java.util.Scanner;
导入java.lang.Math;
导入java.io.*;
课堂随机游戏{
公共静态void main(字符串str[])引发IOException{
扫描仪扫描=新扫描仪(System.in);
String userAns=新字符串();
随机生成器=新随机();
int guess,num,points=0;
System.out.println(“你好…”);
试一试{
睡眠(1500);
}捕获(中断异常例外){
}
“你会考虑玩一个有趣的游戏吗?”
试一试{
睡眠(1000);
}捕获(中断异常例外){
}
userAns=scan.next();
//关于他们是否想玩这个游戏**********
if(userAns.equals(“yes”)){
System.out.println(“是啊,让我们开始吧!”);
系统输出
.println(“游戏目标:\n1.从5个数字中猜出数字\n2。”
+“如果你猜错了,你会被扣分。\n3.玩得开心!”;
试一试{
睡眠(5500);
}捕获(中断异常例外){
}
System.out.println(“\nReady?”);
userAns=scan.next();
if(userAns.equals(“yes”)){
System.out.println(“好的!开始了!”);
//倒计时************************************
试一试{
睡眠(1000);
}捕获(中断异常例外){
}
系统输出打印项次(“3”);
试一试{
睡眠(1000);
}捕获(中断异常例外){
}
系统输出打印项次(“2”);
试一试{
睡眠(1000);
}捕获(中断异常例外){
}
系统输出打印项次(“1”);
}
试一试{
睡眠(1000);
}捕获(中断异常例外){
}
// *****************************************************
System.out.println(“请输入一个整数1-5开始游戏。”);
guess=scan.nextInt();
num=生成器。nextInt(5)+1;
而(点数=0)
{
如果(猜测==num){
System.out.println(“正确!你得了1分!”);
积分++;
系统输出打印项次(点数);
}else if(猜测!=num){
System.out.println(“不正确,你失去1分。”);
点--;
}
}
}
else if(userAns.equals(“no”)){
System.out.println(“GAMEOVER.\n\n\n提示:说“是”);
}
否则{
系统输出打印(“请回答是或否”);
}
}
}

您的代码确实会循环回while循环开始的位置,但它不会在下一次猜测中读取,因为您从用户输入读取的内容在循环之外。这两条线需要在循环内

guess = scan.nextInt();
num = generator.nextInt(5) + 1;

当前代码读入一个int并生成一个int。如果猜测正确,你将得到7分,然后获胜;如果猜错了,你将立即失败。

如果你第一次答错了,你的分数将变成-1

while (points <= 7 && points >= 0)
<代码>while(点=0)
只检查0到7之间的范围,因此它退出循环

您的
,而
循环不会等待
nextInt()
,因此循环只会根据第一次猜测的内容递增或递减。要解决此问题,请在进行计算之前等待下一个输入,然后在循环中进行计算:

while ((points <= 7 && points >= 0) && scan.hasNext()) {
  // we have an input value
  guess = scan.nextInt();
  num = generator.nextInt(5) + 1;
}
while((points=0)和&scan.hasNext(){
//我们有一个输入值
guess=scan.nextInt();
num=生成器。nextInt(5)+1;
}

在while循环中获取用户输入

  while (points <= 7 && points >= 0)
  {
      guess = scan.nextInt();
      num = generator.nextInt(5) + 1;
      // continue 

  }
while(点数=0)
{
guess=scan.nextInt();
num=生成器。nextInt(5)+1;
//继续
}

1。从程序中删除所有不相关的内容(对于初学者来说,这看起来很奇怪)。2.固定压痕。然后它将是可读的,有人可能会回答。创建一个最小的失败例子。太多的代码没有焦点。无论如何提示:您只读取输入(
guess
)一次。它是否编译过?看起来括号没有正确匹配。是的,我对这东西很陌生。谢谢你的快速回复。我现在可以用了。
  while (points <= 7 && points >= 0)
  {
      guess = scan.nextInt();
      num = generator.nextInt(5) + 1;
      // continue 

  }