2017-03-16 73 views
0

我有一个InputMismatchException,它会停止输入小数,但对负整数/负小数无效。尝试捕获和负输入

if(userInput == 1) { 

      int l; 

      l = 0; 

      try { 

       l = input.nextInt(); 


      } catch (InputMismatchException e) { 

       System.out.println(""); 
       input.next(); 

      } 

     } 

如果我添加一个do while循环与if语句任何东西等于或小于零它将如果(userInput == 1)语句,而不是从像它的菜单的起点开始内循环如果输入正数小数,则会执行此操作它也不利于负小数。

我试着给catch添加两个异常,但是不能让它工作。

+1

*它将如果(userInput == 1)语句中环*一个'if'是** **不是一个'loop' –

+0

这可能有助于HTTP:// stackoverflow.com/questions/35604342/im-trying-to-add-a-try-catch-that-tells-the-user-they-cant-plug-in-negative-numb – kalenpw

+0

缓冲区中仍可能有内容,无论是或userInput需要重置,但既然你没有给我们一个问题的工作示例,我们不可能知道该怎么建议 – MadProgrammer

回答

0

你可以把你的int变成一个String并检查它是否有小数点或负号。

Scanner input = new Scanner(System.in); 
    int l; 
    while (true) 
    { 
     l = input.nextInt(); 
     if ((""+l).indexOf('.') >= 0 || (""+l).indexOf('-') >= 0) 
     { 
      System.out.println(/*your message here*/); 
     } 
     else 
     { 
      break; 
     } 
    } 

//continue with your program 

编辑:语法

0

试试这个:

if (input < 0){ 
     throw new IllegalArgumentException("Input cannot be negative."); 
} 

如果是负数,它会抛出异常,然后可以执行捕捉代码。

+0

当我添加到try声明它不执行catch代码。这是我所说的。 '尝试{1} = input.nextInt(); if(l <0)抛出新的IllegalArgumentException(“输入不能为负数”。 } @ – anyset

+1

@anyset - 显然!你需要做的是理解这个建议,并将其适应你的上下文。如果你打算抛出一个异常,就抛出一个你接收**的异常**。但坦率地说,抛出一个异常并不是正确的解决方案......鉴于您目前正在处理其他异常的方式。关键是试图了解异常/异常处理提供了什么,并适当地使用它们(或不)。 (锤子不好螺丝刀) –

+0

我同意! - 而不是抛出异常,你可以简单地拒绝任何负面的输入 – NewBie1234