2013-08-01 26 views
0

我必須編寫一個程序,要求用戶輸入整數,但必須是積極的。 我很確定我必須使用循環,並且不要以爲我被允許使用Math.abs()。在java中獲取用戶輸入的正整數

我現在寫的東西看起來很亂。下面是代碼:

public class Q1{ 
    public static void main(String[] args){ 
     int num1, num2, num3; 

     while(true){ 
      System.out.println("Input first integer."); 
      num1 = TextIO.getInt(); 
      if(num1 > 0) 
       break; 
      System.out.println("Integer isn't positive. Try again"); 
     } 

     while(true){ 
      System.out.println("Input second integer."); 
      num2 = TextIO.getInt(); 
      if(num2 > 0) 
       break; 
      System.out.println("Integer isn't positive. Try again"); 
     } 

     while(true){ 
      System.out.println("Input third integer."); 
      num3 = TextIO.getInt(); 
      if(num3 > 0) 
       break; 
      System.out.println("Integer isn't positive. Try again"); 
     } 

.... 


    } 
} 

我基本上只是做了單獨的,而對於每個整數循環來測試,如果整數爲正,因爲當我使用一個循環,我不能讓它正常運行。有沒有一種方法只使用一個循環,仍然可以工作,但看起來更整潔?

+1

您可以將整數存儲在數組中嗎? –

+0

用戶需要輸入任意數量的整數?或者你知道提前多少次? – Kon

回答

2

您可以移動循環內的另一種方法:

public int readPositiveInt() { 
    int num = 0; 
    int attempt = 0; 
    int maxAttempt = 3; 

    // Allow only maxAttempt to enter correct input. 
    while(true && attempt < maxAttempt) { 
     num = TextIO.getInt(); 
     if(num > 0) 
      break; 
     System.out.println("Integer isn't positive. Try again"); 
     ++attempt; 
    } 

    return num; 
} 

然後再調用這個方法在任何你目前有一個循環。

確保TextIO,無論它是什麼,都可用於此方法。

此外,如果用戶不斷輸入負數,您應該更好地執行最大嘗試次數,因爲您可能會進入無限循環。

0

你可以用你的while循環中的for循環,把你的整數數組中:

int[] nums = new int[] {-1, -1, -1}; 
for (int i = 0; i < 3; i++) { 
    while(nums[i] <= 0) 
    nums[i] = TextIO.getInt(); 
} 
0

當編程嘗試,並實現3個目標:使你的代碼,可讀性強,直觀性和可維護性。

我建議你創建一個可以重用的方法。你的情況的方法會是這個樣子:

public int readPositiveInt(String message) { 
    int num = 0; 
    boolean exitLoop = false; 

    while(!exitLoop){ 
     System.out.println(message); 
     num = TextIO.getInt(); 
     if(num > 0) { 
      exitLoop = true; 
      // I don't like to break from a while(true), I personally find it messy 
     } 
     else { 
      System.out.println("Integer isn't positive. Try again"); 
     } 

    } 

    return num; 
} 

相反像,NUM1,NUM2,NUM3創建變量的...只需創建一個int數組中,所有值存儲在那裏。如果你不確定你想存儲多少個數字,我建議你使用一個List的實現,比如ArrayList。

我希望這會有所幫助。

+0

休息一會兒是凌亂?你是認真的嗎? –

+0

這是我個人的意見。這是允許的,但我不喜歡這種方法。 –

+0

如果你把它稱爲「標誌」之外的東西,那麼使用標誌而不是休息時可能會有所改進...... – ajb

0

也許這樣的事情?

public class Q1{ 
public static void main(String[] args){ 

int[] input_integers = new int[3]; //create an array of however many integers you need 

int i = 0; // initiate your counter 
while(i<input_integers.length){ // you will loop through until all integers are set 
System.out.println("Input integer number "+ (1+i)); // computers count from 0, humans from 1 
input_integers[i] = TextIO.getInt(); 
if(input_integers[i] < 0) // check if it is not positive 
System.out.println("Integer isn't positive. Try again"); 
else { // if it is, increment your counter and get the next integer 
i++; 
} 
} 
} 

} 

希望這有助於

**此代碼未測試

0

這裏是具有單個while循環和不使用陣列中的溶液(這是可以做到)。但是,你可以看到它不符合預期。這樣的實施總是效率低下並且不鼓勵。 所以最好使用一個數組或像其他人一樣的獨立方法建議

int i=0; 
while (i < 3) { 
     int tmp = 0; 
     switch (i) { 
     case 0: 
      num1 = tmp = TextIO.getInt(); 
      System.out.println("Input first integer."); 
      break; 
     case 1: 
      num2 = tmp = TextIO.getInt(); 
      System.out.println("Input second integer."); 
      break; 
     case 2: 
      num3 = tmp = TextIO.getInt(); 
      System.out.println("Input Third integer."); 
      break; 
     } 

     if (tmp < 0) { 
      System.out.println("Integer isn't positive. Try again"); 
     } else { 
      i++; 
     } 
    }