2017-03-16 72 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