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

yptwkmov  于 2022-11-27  发布在  Java
关注(0)|答案(4)|浏览(165)

我可以添加一个try catch来告诉用户他们不能使用字母。但是由于某种原因,添加一个try catch来处理负数似乎不起作用。我知道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();

                     }

                }
iyfjxgzm

iyfjxgzm1#

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

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

当从扫描器读取数字时,您的代码不会抛出任何异常。因此,当您输入一个负数时,您不能期望执行跳转到catch-block。
但是当input为负时,你也可以抛出一个异常。这将使线程直接跳转到catch-block。在catch-block中,你可以打印你传递给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());
}

捕捉Exceptionjava.lang.Exception)通常是不好的做法。这是所有已检查异常的“根”,每当抛出Exception的任何子类时,都会跳转到捕捉块。
只需捕获您所期望的具体异常(在本例中为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(这将显示结果)

enxuqcxy

enxuqcxy2#

您可以这样做:

if (input < 0) {
    throw new IllegalArgumentException();
}

现在如果数字是负数,它将抛出exception,并且catch代码可以被执行。因为你捕获了Exception,所以所有的异常都将在这里被捕获。

**注:**在catch块中,您不需要添加stdin.next();,因为程序将从while循环的第一行继续。

mwg9r5ms

mwg9r5ms3#

为了让catch块捕获异常,需要从代码中抛出异常。如果是负数,input= stdin.nextInt();行将不会抛出异常,因为整数为负数是完全法律的的。您需要添加if条件,如下所示:

input = stdin.nextInt();
if ( input < 0 ) {
  throw new Exception("Negative number entered");
}

但是有些人认为这是不好的做法,因为你是在使用异常来控制程序的流程。所以我给予你另一个例子,如何在不抛出异常的情况下做到这一点:

input = stdin.nextInt();
if ( input < 0 ) {
  System.out.println("Only Positive Numbers Please");
  continue;  // will continue from the beginning of a loop
}
sz81bmfz

sz81bmfz4#

编写一个计算平行六面体的面积和体积的程序。指定图形参数(长度、宽度、高度)时出现错误信息。如果给定,则抛出一个异常并处理它以显示发生了什么错误。可能的错误:1)如果给定数据是负数2)如果给定数据是字母而不是数字3)如果给定数字大于20

强文本

  • 面积计算公式 数字:2*((高 * 长)+(长 * 宽)+(高 * 宽));
  • 图中体积的计算公式为:(长×宽×高);
  • 公式应在Parallelepiped类中编写

相关问题