我试图添加一个尝试捕获,告诉用户他们不能插入负数

Ron*_*ldo 2 java try-catch negative-number

我能够添加一个try catch来告诉用户他们不能使用字母。但是由于某种原因,为负数添加try catch似乎是可行的。我知道try块是哪里东西出错的地方,例如输入如果为负数,则catch可以打印出错误消息。我认为那是我的问题所在。与try catch相关的另一个问题是,我习惯于用户输入-1来输入用户输入的内容,因此我认为它会引起逻辑问题。

tl; dr添加尝试捕获或其他捕获以防止用户添加负数

这不是整个程序,但它的作用是将用户输入的整数过滤掉,并分隔偶数和奇数。

 public static void main(String [] args)
    {
        Scanner stdin = new Scanner(System.in);//for user input
        int[] evenNum = new int [100];//Even Array up too 100
        int[] oddNum = new int[100];//Odd Array up too 100
        int evenIndex=0;//even numbers
        int input=0;//user input
        int i=0;//incrementer for arrays
        int k=0; 
        int j=0;
        String name;

        System.out.println("Type In Your Name");//Type in name 
            name = stdin.nextLine();


while ((i < oddNum.length && i < evenNum.length) && input !=-1)//100 numbers only
        {
    try{//this is what we want anything else the catch will block it and display a message


                System.out.println(name+" Enter a positive number, Enter -1 For results");
                input= stdin.nextInt();

                oddNum[i]=input;//holds input
                i++;//Increments array
            }  

                catch(Exception d){
                    System.out.println("Only Positive Numbers & no Letters Please!");
                    stdin.next();

                     }


                }
Run Code Online (Sandbox Code Playgroud)

dee*_*-64 6

input从扫描仪获取变量后,可以对其进行检查

if (input < 0) {
     System.out.println("Only Positive Numbers & no Letters Please!");
}
Run Code Online (Sandbox Code Playgroud)

从扫描仪读取数字时,您的代码不会引发任何异常。因此,当您输入负数时,您不能期望执行会跳到catch块中。

但是当input值为负数时,您也可以引发异常。这将使线程直接跳入catch块。然后,您可以在catch块中打印通过的消息IllegalArgumentException

if (input < 0) {
     // this gets caught in the catch block
     throw new IllegalArgumentException("Only Positive Numbers & no Letters Please!"); 
}      
...
} catch (IllegarArgumentException e) {
    System.out.println(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

抓住Exceptionjava.lang.Exception)通常是不好的做法。这是所有检查到的异常的“根”,每当Exception抛出的任何子类时,catch块都将跳入其中。
只需捕获您期望的具体例外即可。(在这种情况下IllegalArgumentException。)

同样,您不应使用异常来控制程序的执行流程。

我建议这样的事情:

do {
    System.out.println(name+" Enter a positive number, Enter -1 For results");
    try {
        input = stdin.nextInt();
    } catch (java.util.InputMismatchException e) { // if the user enters something that is not an integer
        System.out.println("Please only enter integers");
        input = Integer.MIN_VALUE; 
        stdin.next(); // consume the non-int so we don't get caught in an endless loop
    }
} while (input < -1);  // loop as long as the input is less than -1

if (input == -1) {
    // show the results here
}
Run Code Online (Sandbox Code Playgroud)

这将接受正整数,并提示输入,直到用户输入正数,0(零)或-1(应显示结果)为止。