我为帮助计算了一切
当我在尝试1/4处输入字母时它工作正常并且继续,但是一旦我在尝试2/4时键入一个字母,它就会打印该消息并且程序停止。关于#2的任何提示,我只能想到if(猜测> = 4&& guess< = 16)else语句(不确定这是否正确)
当我执行代码时 -
Guess a number between 1 and 16.
Attempt 1 of 4: 8
You guessed 8
Too Low!
Attempt 2 of 4: a
Please enter an integer between 4-16
在
之后无法输入任何内容问题:如果用户在
中输入,我必须创建异常处理程序1)非数字输入
2)超出范围输入
3)必须保留当前的猜测量
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;
public class GuessingGame {
static final int limit = 4;
static final int maxInteger = 16;
public static void main(String[] args) {
Random rand = new Random();
int target = rand.nextInt(maxInteger) + 1;
int x = 1;
do{
try{
Scanner input = new Scanner(System.in);
System.out.printf("Guess a number between 1 and %d.\n", maxInteger);
int attempts = 1;
while (attempts <= limit) {
System.out.printf("Attempt %d of %d: ", attempts, limit);
int guess = input.nextInt();
System.out.printf("You guessed %d\n", guess);
if(guess > target) {
System.out.printf("Too High! \n");
}
else if(guess == target){
System.out.printf("The answer is %d, You win!", guess);
attempts = 20;
}
else{
System.out.printf("Too Low! \n");
}
attempts+=1;
x = 2;
}
if(attempts==5){
System.out.println("You lose!");
}
}
catch(InputMismatchException e){
System.out.printf("Please enter an integer between 4-16");
continue;
}
}while(x == 1);
}
}
答案 0 :(得分:2)
您正在检查外部循环中的while(x == 1);
,并且通过执行x
从内部循环中增加x = 2;
的值。这将打破这个条件,你将走出外部while
循环。
如果要继续,应该为外部while
循环设置有效条件。尝试类似while(x < 5);
您的代码应如下所示:
do {
try {
...
/* Inner While */
while() {}
...
} catch () {
/* Exception Handling */
...
}
} while(x < 5); /* Decide a valid condition */
答案 1 :(得分:1)
1)尝试在内部循环中移动try catch块,使其仅包含
int guess = input.nextInt();
2)你对2号的想法应该有效。
if(guess>=4 && guess<=16)
确保这是您支票中的第一个if语句,然后您不必更改任何其他if语句。
3)在两个叫做guess的循环之外创建一个变量,而不是说
int guess = input.nextInt();
只是说
guess = input.nextInt();
在您更新之前,您可以使用当前的猜测。
4)你的变量x令人困惑。你是用它作为结束外循环的标志吗?如果是这种情况,请将其作为布尔值
boolean flag = true;
然后,当您准备好退出循环时,可以将标志设置为false。改变
x = 2;
到
flag = false;
也为循环所有改变
while(x==1)
到
while(flag)