请注意,尽管我对Java很满意,但我并不是特别有天赋,也不知道所有术语,因此请用非常小的编码术语和普通英语解释您的答案,或者在使用它之后解释行话的含义。此外,这是我第一次与Stackoverflow,所以让我知道这是一个体面的问题,并给我一些指针。Do-while循环问题
我在高中时期参加AP计算机科学课。我们使用Java。我们最近被教导了do-while循环,并且我刚刚完成了使用do-while循环的“实验室”,但是存在一个问题。
首先,让我解释一下实验室。该程序生成一个1-10之间的随机整数,用户必须猜测(猜测使用扫描仪存储为int),有几个整数值跟踪猜测次数,多少次猜测大于计算机整数,以及有多少太低了。当你看我的代码时,你会注意到我有一个System.out.println(compGen);//compGen is the computer generated int
。目的是测试代码。
问题在于比较userGen(用户猜测)和compGen的if语句中。
if(userGen==compGen)
{
//do a lot of stuff
}
在这个if语句,它不打印,我已经写了,如果用户猜测不止一次正确的SOP。但是,我没有把它写入程序,它似乎是自己做的。我使用了早期提到的打印compGen int的SOP,并且将其作为我的第一次猜测输入,并且完美运行。 if语句块中的所有内容都可以完美执行并正确地打印所有内容。但是,当我做了第二次猜测,第三次猜测或任何不是第一次的猜测时,没有打印任何内容。看到下面的代码并运行它。我不相信这应该有所作为,但我使用的IDE是Eclipse,因此是包声明。请帮忙。
package Chapter_3.Lab03_Chapter3;
import java.util.*;
public class Guess
{
public static void main(String[] args)
{
Scanner userInput = new Scanner(System.in);//Scanner
int compGen = (int)(Math.random()* 10 + 1);//compGen is computer number
System.out.println(compGen); //USED TO VERIFY FAILURE. VALUE WAS ENTERED TO TEST CODE
int guessTrack = 0;//tracks number of guesses
int tooHighTrack = 0;//CREATING INTS TO TRACK STUFF
int tooLowTrack = 0;
System.out.println("Welcome to the integer guessing game that everyoone loves!");//PROMPT
System.out.println("Please enter your guess for the integer. Remeber, it is between one and ten.");//GREETING
int userGen = userInput.nextInt();//USER GUESS
do
{
guessTrack++;//Increase guess value
if(userGen > compGen)//checks user value in relation to computer generated int
{
System.out.println("Try again! Your guess was too high!");//inform user of bad guess
userGen = userInput.nextInt();//new guess
tooHighTrack++;//if guess is too high, this int tracker increases
}
else if(userGen < compGen)//checks user value in relation to computer generated int
{
System.out.println("Try again! Your guess was too low!");//inform user of guess
userGen = userInput.nextInt();//new guess
tooLowTrack++;//increases if user guess is too low
}
else if(userGen==compGen)//if both values are equivalent, execute THIS IS THE PROBLEM STATEMENT!!
{
System.out.println("Great job! You guessed the right number!");//congratulate
if(guessTrack>1)
{
System.out.println("It took you: "+guessTrack+" guess to get the right answer.");//print guess tracked int
}
else
{
System.out.println("It took you: "+guessTrack+" guesses to get the right answer.");//print guess tracked int
}
System.out.println(tooHighTrack +" guesses were too high and "+ tooLowTrack+ " were too low.");//print how many guess were too big or too low
System.out.println("HELLO"); //Used to verify failure of code
userInput.close();//close scanner object
}
}
while (userGen != compGen);//condition to be ultimately checked
}
}
我一直无法弄清楚什么是错的。有一次,我删除了整个if语句并重新输入(我知道它不会做任何事情,但我必须尝试)。这个问题对我来说毫无意义。没有任何错误或任何东西弹出,没有任何东西弹出在控制台上,这让我感到害怕。提前致谢。
感谢您提出减少问题的建议。这是我的第一篇文章,并希望说清楚,我没有这个网站的经验。现在到你的答案,我赞赏按积分分组,这绝对有帮助。下面的用户指出,如果提交了正确的答案,则由于while条件将是错误的,因此do-while将终止。你的答案不会有同样的问题吗?即使'nextInt()'在块的顶部? – Ungeheuer 2014-10-17 00:56:32
不,因为用户输入在if-elseif-else进入之前被读取。因此,输入始终在相同的迭代过程中完成,并在之后结束。 – Felk 2014-10-17 01:01:34
哦!现在我明白了!通过在顶部输入用户输入,答案将过滤到if/else-if块,保留该值并允许'userGen == compGen'代码正确执行。而且我仍然可以得到“猜得太高”的代码,因为我在循环中得到了int。你先生非常聪明。 :) – Ungeheuer 2014-10-17 01:02:26