Java异常处理循环错误

时间:2016-02-16 21:07:59

标签: java

我为帮助计算了一切

当我在尝试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);
}
}

2 个答案:

答案 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)