我试图添加一个 try catch 告诉用户他们不能插入负数

新手上路,请多包涵

我能够添加一个 try catch,告诉用户他们不能使用字母。但是由于某种原因,为负数添加一个 try catch dosent 似乎有效。我知道 try 块是如果某些事情可能出错的地方,比如输入catch 可以打印出错误信息的负数。我认为那是我的问题所在。与 try catch 相关的另一个问题是,我习惯用户输入 -1 来输入用户输入的内容,所以我认为它会导致逻辑问题。

tl;dr 添加 try catch 或另一个 catch 以防止用户添加负数

这不是整个程序,但它所做的是过滤掉用户输入的整数并将偶数和赔率分开。

  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();

                     }

                }

原文由 Ronaldo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 439
1 个回答

从扫描器中获取后,您可以检查 input 变量

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

从扫描仪读取数字时,您的代码不会抛出任何异常。因此,您不能指望在输入负数时执行会跳转到 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());
}

通常捕获 Exception ( java.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
}

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

原文由 deepthought-64 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题