我正在尝试让我的程序循环6次。我的问题是,它一直在运行,并且在6次之后没有停止。我将answer、userGuess和numOfGuesses作为实例变量。
public static int guess(int userGuess){
System.out.println("Enter your guess");
while (numOfGuesses <= 6){ // this is my problem
numOfGuesses = numOfGuesses + 1 ;
while (userGuess != answer){
userGuess = scan.nextInt();
if(userGuess < answer){
System.out.println("Too low, try again");
}
else if(userGuess > answer){
System.out.println("Too high, try again");
}
else{
}
}
}
// rest of method works fine 发布于 2020-10-28 06:19:04
我想通了。我会在我的项目评分后发布整个答案,但它需要一个for循环。
另外,我希望这对将来在猜谜游戏项目中遇到困难的学生有所帮助。显然,不要复制和粘贴,但要以此为起点。这是教授们看你是否抄袭代码的第一个地方。
private static int setGuess(int userGuess){
int differential = answer - guess;
String low = "Too low, try again ";
String high = "Too high, try again ";
String colder = "Getting colder";
String warmer = "Getting warmer";
System.out.println("Enter your guess.");
for(int i = 0; i < 6; i++){
while(userGuess != answer){
userGuess = scan.nextInt();
if (userGuess < answer){
System.out.println(low);
if(differential < 15){
System.out.println(colder);
}
else if (differential >= 15){
System.out.println(warmer);
}
else{
}
}
else if (userGuess > answer){
System.out.println(high);
if(differential <= 15){
System.out.println(warmer);
}
else if (differential > 15){
System.out.println(colder);
}
else{
}
}
else{
}
}
}
if (userGuess == answer){
System.out.println("Congratulations! You guessed the number!");
}
if (numOfGuesses == MAX_GUESSES_ALLOWED){
gameOver = true;
}
return userGuess;
}发布于 2020-10-25 09:22:55
这种循环结构可能不是您想要的。在有2个while循环的情况下,您实际上并没有以任何方式限制猜测的数量-您所要做的就是重新运行猜测程序6次。此外,由于内部while循环会一直执行,直到答案完全正确,所以用户无法知道他们的猜测是过低还是过高。你可能想要类似这样的东西:
public static int guess(int userGuess){
do {
System.out.println("Enter your guess: ");
userGuess = scan.nextInt();
if (userGuess < answer) {
System.out.println("Too low, try again");
} else if (userGuess > answer) {
System.out.println("Too high, try again");
} else {
// todo tell the user they were right
}
numOfGuesses = numOfGuesses + 1;
} while (numOfGuesses <= 6 && userGuess != answer);
// in the case the user used up all their guesses, tell them they didn't get it right
// todo return something here because this function is supposed to return an int
}还要注意我在底部的注释,这个方法在返回一些东西之前不会编译。我还假设所有引用的变量都在其他地方定义。
我也怀疑参数是userGuess --提供一个我们立即覆盖的参数有什么意义呢?也许参数应该是answer?
发布于 2020-10-25 11:30:13
程序中的一个主要问题是while语句中的条件不会给出您想要的结果。您应该使用带有while(numOfGuesses<=6 && userGuess != answer)条件的while循环代替两个while循环。这是因为while循环将一直执行,直到它运行六次,并且用户到那时还没有猜到答案。假设您的实例变量和方法使用了一个类,而另一个类包含了main方法,那么您可以尝试这样做。
public class guess {
//these are your instance variables
int numOfGuesses=6;
int tempNum =1;
//answer can be any number. I use 2 as an example, this is the number to be guessed in 6 tries.
int answer = 2;
public void guess(int userGuess, int answer){
if(userGuess < answer){
System.out.println("Too low of a number");
}
else if(userGuess>answer){
System.out.println("Too high of a number");
}
//do something when user guesses answer. Example, end the program.
else if(userGuess==answer) {
//print the correct guess
System.out.println("You have guessed the correct answer " + answer);
//exit out of entire program
System.exit(0);
}
}
}上面的类包含实例变量,但没有main方法和guess方法。因此,使用main方法创建另一个类。这使用了面向对象的编程。
import java.util.Scanner;
public class guessTester {
public static void main(String[] args) {
//initialize userGuess
int userGuess = 0;
//input for scanner
Scanner input = new Scanner(System.in);
guess Guess = new guess();
//while loop becomes false when numOfGuesses = 6 and the userGuess does not equal to the answer.
while (Guess.tempNum<= Guess.numOfGuesses && userGuess != Guess.answer){
System.out.println("Enter a guess");
userGuess = input.nextInt();
Guess.tempNum+=1;
Guess.guess(userGuess,Guess.answer);
//if the temporary number is equal to number of guesses
if(Guess.tempNum -1 ==Guess.numOfGuesses) {
System.out.println("You ran out of guesses ! ");
}
}
}
}https://stackoverflow.com/questions/64519261
复制相似问题