我能够添加一个 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 许可协议
从扫描器中获取后,您可以检查
input
变量从扫描仪读取数字时,您的代码不会抛出任何异常。因此,您不能指望在输入负数时执行会跳转到 catch 块。
但是当
input
为负时,您也可以抛出异常。这将使线程直接跳入 catch 块。在 catch 块中,您可以打印传递给IllegalArgumentException
的消息通常捕获
Exception
(java.lang.Exception
) 是不好的做法。这是所有已检查异常的“根”,只要抛出Exception
的任何子类,就会跳入 catch 块。只需捕获您期望的具体异常。 (在这种情况下
IllegalArgumentException
。)此外,您不应使用异常来控制程序的执行流程。
我会建议这样的事情:
这将接受正整数并提示输入,直到用户输入正数 0(零)或 -1(应显示结果)