Java 检查有效输入并进一步使用输入

Java 检查有效输入并进一步使用输入,java,Java,作为学习的一部分,我正在编写一个简单的模拟(是的,我只是Java的初学者)。在它中,我通过扫描仪从用户那里获取输入,我想检查输入的有效格式(仅数字)和有效范围。我遇到了一些困难-输入值不是从“while”循环中出来的。你能给我小费吗?我会很感激的 以下是您可能感兴趣的我的部分代码: // check for invalid input String input; boolean valid = false; while (!valid){ try{ input = sc.

作为学习的一部分,我正在编写一个简单的模拟(是的,我只是Java的初学者)。在它中,我通过扫描仪从用户那里获取输入,我想检查输入的有效格式(仅数字)和有效范围。我遇到了一些困难-输入值不是从“while”循环中出来的。你能给我小费吗?我会很感激的

以下是您可能感兴趣的我的部分代码:

// check for invalid input
String input;
boolean valid = false;
while (!valid){
    try{
        input = sc.next();
        user = Integer.parseInt(input);
        valid = true;
    }catch (NumberFormatException ex) {
        System.out.println(ex);
        System.out.println("Number but not a character or a symbol!");
    }
    System.out.println("Try once more!");
}
// interaction with user;
while (user !=3){
    if (user ==1){
        System.out.println("What angle I should set?");
        userChange = sc.nextDouble();
        shot.userAngle(userChange);
        shot.show();
    }
    else if (user ==2){
        System.out.println("What speed I should set?");
        userChange = sc.nextDouble();
        shot.userSpeed(userChange);
        shot.show();
    }
    else {
        System.out.println("Wrong number!");
    }
    System.out.println("What you want to change?");
    user = sc.nextInt();
}

它表示变量“user”可能未设置。

Soled。这里的工作代码

    int user; 
    double userChange;
    boolean stop = false;

    // check for invalid input if not integer and if out of range
    // interaction with user
    while (!stop){
        try {
            System.out.println("What you want to change?");
            user = sc.nextInt();
            if (user ==3){
                    stop = true;
                }

            while (user !=3){
                if (user ==1){
                    System.out.println("What angle I should set?");
                    userChange = sc.nextDouble();
                    shot.userAngle(userChange);
                    shot.show();
                }
                else if (user ==2){
                    System.out.println("What speed I should set?");
                    userChange = sc.nextDouble();
                    shot.userSpeed(userChange);
                    shot.show();
                }

                else {
                    System.out.println("Wrong number!");
                }
                System.out.println("What you want to change?");
                user = sc.nextInt();
                if (user ==3){
                    stop = true;
                }
            }
        }
        catch (InputMismatchException e){
            System.out.println(e);
            System.out.println("Wrong input! Number but not a symbol or a character!");
            sc.next();

        }
    }

局部变量需要初始化。您可能正在声明
int user在上面的某个位置,并且不初始化它。您需要将其设置为
int user=0
或其他什么你可以发布你实际设置用户的部分代码吗?如果第一个
循环退出,编译器无法判断必须设置
用户。这是一个复杂的逻辑,超出了编译器的推理能力