我可以添加一个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();
}
}
4条答案
按热度按时间iyfjxgzm1#
从扫描程序获取
input
变量后,可以对其进行检查当从扫描器读取数字时,您的代码不会抛出任何异常。因此,当您输入一个负数时,您不能期望执行跳转到catch-block。
但是当
input
为负时,你也可以抛出一个异常。这将使线程直接跳转到catch-block。在catch-block中,你可以打印你传递给IllegalArgumentException
的消息。捕捉
Exception
(java.lang.Exception
)通常是不好的做法。这是所有已检查异常的“根”,每当抛出Exception
的任何子类时,都会跳转到捕捉块。只需捕获您所期望的具体异常(在本例中为
IllegalArgumentException
)。此外,您也不应该使用例外状况来控制程式的执行流程。
我建议这样做:
这将接受正整数,并将提示输入,直到用户输入一个正数,0(零)或-1(这将显示结果)
enxuqcxy2#
您可以这样做:
现在如果数字是负数,它将抛出
exception
,并且catch
代码可以被执行。因为你捕获了Exception
,所以所有的异常都将在这里被捕获。**注:**在
catch
块中,您不需要添加stdin.next();
,因为程序将从while
循环的第一行继续。mwg9r5ms3#
为了让catch块捕获异常,需要从代码中抛出异常。如果是负数,
input= stdin.nextInt();
行将不会抛出异常,因为整数为负数是完全法律的的。您需要添加if条件,如下所示:但是有些人认为这是不好的做法,因为你是在使用异常来控制程序的流程。所以我给予你另一个例子,如何在不抛出异常的情况下做到这一点:
sz81bmfz4#
编写一个计算平行六面体的面积和体积的程序。指定图形参数(长度、宽度、高度)时出现错误信息。如果给定,则抛出一个异常并处理它以显示发生了什么错误。可能的错误:1)如果给定数据是负数2)如果给定数据是字母而不是数字3)如果给定数字大于20
强文本