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

Java 我试图添加一个try-catch,告诉用户不能插入负数,java,try-catch,negative-number,Java,Try Catch,Negative Number,我可以添加一个try-catch,告诉用户他们不能使用 字母。但是由于某些原因,为负数添加一个try-catch似乎不起作用。我知道try块是这样的,如果有什么事情出错,比如输入负数,catch可以打印出错误消息。我想这就是我的问题所在。与try-catch相关的另一个问题是,我习惯于用户在-1中输入用户输入的内容,所以我认为这会导致逻辑问题 tl;dr添加一个try catch或另一个catch以防止用户添加负数 这不是整个程序的核心,但它所做的是过滤掉用户输入的整数,并分离出偶数和赔率 p

我可以添加一个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();

                     }


                }
publicstaticvoidmain(字符串[]args)
{
Scanner stdin=新扫描仪(System.in);//用于用户输入
int[]evenNum=new int[100];//甚至数组也向上100
int[]oddNum=newint[100];//奇数数组也向上100
int evendex=0;//偶数
int input=0;//用户输入
int i=0;//数组的增量
int k=0;
int j=0;
字符串名;
System.out.println(“键入您的姓名”);//键入您的姓名
name=stdin.nextLine();
while((i
您可以这样做:

if (input < 0) {
    throw new IllegalArgumentException();
}
input = stdin.nextInt();
if ( input < 0 ) {
  throw new Exception("Negative number entered");
}
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
}
if(输入<0){
抛出新的IllegalArgumentException();
}
现在,如果数字为负数,它将抛出
异常
,并且可以执行
捕获
代码。因为您捕获了
异常
,所以所有异常都将在此处捕获


注意:
catch
块中,您无需添加
stdin.next();
,因为当
循环时,程序将从
的第一行继续。

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

if (input < 0) {
    throw new IllegalArgumentException();
}
input = stdin.nextInt();
if ( input < 0 ) {
  throw new Exception("Negative number entered");
}
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
}
input=stdin.nextInt();
如果(输入<0){
抛出新异常(“输入负数”);
}
虽然有些人认为这是一种错误的做法,因为你使用异常来控制程序的流程。所以我给你另一个例子,如何在不抛出异常的情况下做到这一点:

input = stdin.nextInt();
if ( input < 0 ) {
  System.out.println("Only Positive Numbers Please");
  continue;  // will continue from the beginning of a loop
}
input=stdin.nextInt();
如果(输入<0){
System.out.println(“请仅限正数”);
continue;//将从循环的开始处继续
}

从扫描仪获取变量后,可以检查
输入
变量

if (input < 0) {
     System.out.println("Only Positive Numbers & no Letters Please!");
}
捕获
异常
java.lang.Exception
)通常是不好的做法。这是所有已检查异常的“根”,每当抛出
异常
的任何子类时,都会跳入catch块。
只需捕获您期望的具体异常(在本例中为
IllegalArgumentException

此外,您不应该使用异常来控制程序的执行流

我建议这样做:

if (input < 0) {
    throw new IllegalArgumentException();
}
input = stdin.nextInt();
if ( input < 0 ) {
  throw new Exception("Negative number entered");
}
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
}
do{
System.out.println(name+“输入正数,结果输入-1”);
试一试{
输入=stdin.nextInt();
}catch(java.util.InputMismatchException e){//如果用户输入的内容不是整数
System.out.println(“请只输入整数”);
输入=Integer.MIN_值;
stdin.next();//使用非int,这样我们就不会陷入无休止的循环中
}
}while(输入<-1);//循环,只要输入小于-1
如果(输入==-1){
//在这里显示结果
}

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

是输入变量,if语句进入try块?@罗纳尔多是的,代码应放在输入行所在的位置,而不是
input=stdin.nextInt();
没有必要继续,因为它捕获while循环中的所有异常。@Bahramdun Adil continue语句没有异常,这是没有异常的代码示例。如果用户输入字母,您的代码将失败。并且(当前)有没有可用的
InputMissmatchException
(检查拼写)。不,我还没有投票。@Tom谢谢。我修正了打字错误。如果用户输入一封信,InputMismatchException将被捕获,
input
将被设置为MIN_值。这将导致do while循环再次执行。还有什么疏忽吗?如果您的问题得到了回答,请友好地投票/接受您想要的答案k是正确的。