如何重新分配已输入的基于扫描仪的值? - Java

How do I reassign a scanner-based value that was already entered? - Java

没有看到任何可以回答我问题的帖子,我会自己问。我目前正在尝试找出一些程序,并打算制作一个简单的程序,要求用户输入一个整数。输入用户输入的任何内容后,如果它是一个变量,它会在下面的输出行中说明。如果用户没有输入整数,它会捕获错误并要求用户尝试重新输入他们的整数——这个过程会重复,直到输入了一个整数并且程序可以终止。

一般来说,除了真正直接的编程之外,我的经验水平很低,而且成功了,我的代码不仅有比我目前遇到的问题更多的错误,而且我可能有我没有的错误'甚至不知道在那里。

我已经尝试了很多不同的东西,这就是我对其他一些块的情况有所了解的地方,但这是我现在的位置:

import java.util.Scanner;

public class LauncherMain {

    static Scanner reader = new Scanner(System.in);

    public static void setInputValue() {
        int userInput = reader.nextInt();
    }

    public static void tryInputValue(int userInput) {       //do I even need this parameter, it seems to not have any correlation with the userInput integer I defined above
        try {
            setInputValue();
        }
        catch (java.util.InputMismatchException userInput) {    //if the code is in the method it will accept using userInput, but then goes on about some duplicate variable
            System.out.println("That wasn't an integer!");      //I haven't really looked into it, but I also would like this to be a warning instead of basic output
            setInputValue();    //I don't think this is right either, would it have to call a tertiary method that calls the try again? ...but I have a (necessary) finally block
        }
        finally {
            System.out.println("Awesome, your value is now: " + userInput);
        }
    }

    public static void main(String[] args) {
        System.out.println("Enter an integer:");
        tryInputValue(int userInput);   //Looks like I am also getting some sort of error down here, it has to do with not being able to be resolved to a variable
    }

}

好吧,所以如果你设法通过阅读那个可能非常错误的代码幸存下来,我遇到的主要问题是让用户能够在上次尝试失败后重新输入希望是整数的内容.我在尝试添加一个块来执行此操作之前所做的工作是可行的,此外,如果输入的不是整数,也不会崩溃,因为那个 catch 块就在那里。问题是我被错误输入的值困住了,因此无法使用变量:userInput,因为它是输入不匹配。因此,在尝试添加允许重新分配的内容后,它开始抛出一些错误,我开始更改内容,现在我在不同的地方遇到错误,我什至不明白。

如果有人愿意帮忙,谢谢吨!如果您愿意,描述您提供的修复程序中的所有内容将非常有用! :)

您将 "int userInput" 传递给该方法,这是不正确的语法。您需要传入一个值而不是声明。例如:

int ui = 0;
tryInputValue(ui);

所以如果你想传递用户输入的值,你需要在调用 tryInputValue 之前扫描他们的输入。测试用户是否键入整数的一种简单方法是使用 Integer.partInt(String) 这里是文档:http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#parseInt%28java.lang.String%29

你应该也有一个 do{...}while();循环以便您继续提示用户输入,直到其格式正确。

当您调用 int userInput = reader.nextInt(); 时,userInput 变量仅定义在 setInputValue() 方法的范围内,因此目前您无法访问它之后的输入已输入。

您可以使 userInput 成为一个实例变量,或者您可以只 return 来自 setInputValue() 方法的值。

您在 catch (java.util.InputMismatchException userInput) { 上遇到的重复变量错误是因为您已经将 userInput 定义为 tryInputValue() 方法中的参数。 只需将异常命名为其他名称,例如 (java.util.InputMismatchException e)

您还需要添加一个循环,以便始终读取 try/catch 块内的输入,否则如果输入无效,您将不会捕获异常。

以下是修复错误并使其正常运行的一种方法:

import java.util.Scanner;

public class LauncherMain {

    static Scanner reader = new Scanner(System.in);

    //int return value
    public static int setInputValue() {
        int userInput = reader.nextInt();
        return userInput; //return the value entered
    }

    //use int return value to access value in main
    public static int tryInputValue() {
        int userInput = 0; //initialize the variable to store input      
        boolean valid = false; //boolean to enable looping until valid input is entered
        while (valid == false){      
          try {
            userInput  = setInputValue(); //get return value
            valid = true;  //set valid to true if no exception thrown
          }
          catch (java.util.InputMismatchException e) {    //remove duplicate            
            System.out.println("That wasn't an integer!");                  

          }
          finally {
           //nothing needed here
          }
        }

        System.out.println("Awesome, your value is now: " + userInput); //this will work now, since userInput is in scope

        return userInput;
    }

    public static void main(String[] args) {
        System.out.println("Enter an integer:");
        int n = tryInputValue();   //no parameter, but get the return value 

        System.out.println(n);   //you now have access to the number the user entered
    }

}