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)
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)
抓住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
}
Run Code Online (Sandbox Code Playgroud)
这将接受正整数,并提示输入,直到用户输入正数,0(零)或-1(应显示结果)为止。