2014-01-23 49 views
-1

該程序接受用戶輸入,該用戶輸入應該是大於0的整數。如果用戶不這樣做,他會被通知錯誤並被重新提示。輸入正確的輸入後,返回該值。什麼是最好的方法來做到這一點?以下代碼是我的嘗試,但不起作用。對於這樣一個簡單的任務似乎不必要的複雜。什麼是最簡單的方法來檢查輸入的數字是否是一個正整數,如果不是,再次提示?

System.out.println("Please enter an integer greater than 0:"); 
    Scanner scan = new Scanner(System.in); 
    int red = -1; 
    do 
    { 
     try 
     { 
      red = scan.nextInt(); 
     }catch(InputMismatchException e) 
     { 
      System.out.println("Number must be an integer"); 
      scan.nextLine(); 
      if(red < 1) 
       System.out.println("Number must be more than zero"); 
      else 
       break; 
     } 
    }while(true); 
    return red; 

有時候,我不知道該怎麼把我的問題,因爲我已經知道代碼不起作用 - 所以,如果有別的東西,我應該告訴請讓我知道。

+0

其中的一個問題是'nextInt'不會消耗換行字符,這意味着你將在第一過去後,一個無限循環結束了...而且我不知道'scananner'是;) – MadProgrammer

回答

0

基本概念正朝着正確的方向運行,但要注意,nextInt不會消耗新行,將其留在掃描儀內,這意味着在第一次不成功的循環之後您將以無限循環結束。

就個人而言,我只是使用nextLine將輸入作爲String,這將消耗新行,導致下一個循環停止在語句處。

那我就簡單地解析String使用Integer.parseInt

例如一個int值...

Scanner scan = new Scanner(System.in); 
int red = -1; 
do { 
    System.out.print("Please enter an integer greater than 0:"); 
    String text = scan.nextLine(); 
    if (text != null && !text.isEmpty()) { 
     try { 
      red = Integer.parseInt(text); 
      // This is optional... 
      if (red < 1) { 
       System.out.println("Number must be more than zero"); 
      } 
     } catch (NumberFormatException exp) { 
      // This is optional... 
      System.out.println("Not a number, try again..."); 
     } 
    } 
} while (red < 1); 
0

我使用這個類來代替ScannerBufferedReader類來獲取用戶輸入:

import java.io.*; 
public class Input{ 
private static BufferedReader input=new BufferedReader 
       (new InputStreamReader(System.in)); 
public static Double getDouble(String prompt){ 
    Double value; 
    System.out.print(prompt); 
    try{ 
     value=Double.parseDouble(Input.input.readLine()); 
    } 
    catch (Exception error){ 
     // error condition 
     value=null; 
    } 
    return value; 
} 
public static Integer getInteger(String prompt){ 
    Integer value; 
    System.out.print(prompt); 
    try{ 
     value=Integer.parseInt(Input.input.readLine()); 
    } 
    catch (Exception error){ 
     // error condition 
     value=null; 
    } 
    return value; 
} 
public static String getString(String prompt){ 
    String string; 
    System.out.print(prompt); 
    try{ 
     string=Input.input.readLine(); 
    } 
    catch (Exception error){ 
     // error condition 
     string=null; 
    } 
    return string; 
} 
} 

現在,要回答你的問題,你可以寫你的代碼像th是:

public class InputTest { 


public int checkValue() { 

    int value; 
    do { 
     value = Input.getInteger("Enter a value greater than 0: "); 
    } while (value <= 0); 

    return value; 

    } 
    } 
相關問題