2016-04-26 146 views
0

我想做一個簡單的程序,要求用戶的年齡,並顯示錯誤,當用戶輸入一個非整數值。不知道在這種情況下使用什麼循環

這裏就是我所做的迄今:

import java.util.Scanner; 

public class apples { 

public static void main(String args[]) { 

    Scanner nameinput = new Scanner(System.in); 

    System.out.println("Please enter your name to begin."); 

    System.out.println("Hello " + nameinput.nextLine() + "!"); 

    Scanner ageinput = new Scanner(System.in); 

    System.out.println("Please enter your age"); 

    if(!ageinput.hasNextInt()){ 

     System.out.println("Please enter an integer"); 

    } 

    System.out.println("You've entered a valid age"); 

    nameinput.close(); 
    ageinput.close(); 
} 

} 

這裏就是我想:

每次用戶輸入一個非整數,我想出現Please enter an integer錯誤。然後用戶應該能夠再次輸入他們的年齡,這將再次被檢查,如果它是一個整數,等等。這將繼續,直到用戶輸入一個整數,然後纔會顯示消息You've entered a valid age。我確信在這種情況下,哪個循環不會使用(while,while,while),也不知道如何在代碼中實現它。

+0

只需使用一段時間和休息 –

回答

0

正如你在Java中知道他們是3種類型的循環:

The while and do-while Statements

do-whilewhile之間的差異在於do-while在循環底部而不是頂部計算其表達式。因此,DO塊內的語句總是至少執行一次

while是一個簡單的預試驗循環,即條件第一將在移動到循環體前應檢查:

while(condition)  # First check, if true or false 
{ 
    # Body 
} 

do-while環然而,至少一次的循環體的執行後檢查條件,這是一個試驗後循環:

do{  
     # Body executed at least once 
}while(condition); 

The for Statement

for聲明提供了一個緊湊的方式來遍歷值的範圍。程序員通常是指其爲「for循環」的,因爲它反覆循環的方式,直到滿意爲止特定的條件爲

注意,在你的代碼,詢問年齡的用戶,正確的選擇是do-while,因爲你需要執行你的程序至少一次提示消息,然後然後你必須檢查條件,如果這是你打算做的,那麼這將足以滿足你的目的。雖然,你仍然可以使用while

這是你的代碼編輯:

import java.util.Scanner; 

public class apples { 

public static void main(String args[]) { 

    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter your name to begin."); 
    System.out.println("Hello " + input.nextLine() + "!"); 

    System.out.println("Please enter your age"); 

    do{ 

     if(input.hasNextInt()){ 
       System.out.println("You've entered a valid age"); 
       break; 
       } 

     else{ 
       System.out.println("Please enter an integer"); 
       input.next(); 
      } 

    }while(true); 

    } 

} 

因爲用於循環的條件是布爾true真的沒有,如果你使用while代替do-while除非如果你想改變的事這裏條件,這取決於你。就目前而言,這段代碼非常接近您發佈的原始代碼,並且從我的角度來看,它的工作原理可能不是最好的代碼,對於相同的問題域可能有其他方法更簡單或更復雜。

-2

希望這是你想要的。我會建議使用同時要走的路(我的偏好)
使用while ::

public static void main(String args[]) { 

    Scanner nameinput = new Scanner(System.in); 

    System.out.println("Please enter your name to begin."); 

    System.out.println("Hello " + nameinput.nextLine() + "!"); 

    Scanner ageinput = new Scanner(System.in); 

    System.out.println("Please enter your age"); 

    while (!ageinput.hasNextInt()) { 
     System.out.println("Please enter an integer"); 
     ageinput.next(); 
    } 
    System.out.println("You've entered a valid age"); 
    nameinput.close(); 
    ageinput.close(); 
} 

使用爲::

public static void main(String args[]) { 

    Scanner nameinput = new Scanner(System.in); 

    System.out.println("Please enter your name to begin."); 

    System.out.println("Hello " + nameinput.nextLine() + "!"); 

    Scanner ageinput = new Scanner(System.in); 

    System.out.println("Please enter your age"); 

    for (; !ageinput.hasNextInt();) { 
     System.out.println("Please enter an integer"); 
     ageinput.next(); 
    } 
    System.out.println("You've entered a valid age"); 
    nameinput.close(); 
    ageinput.close(); 
} 

使用做而

public static void main(String args[]) { 

    Scanner nameinput = new Scanner(System.in); 

    System.out.println("Please enter your name to begin."); 

    System.out.println("Hello " + nameinput.nextLine() + "!"); 

    Scanner ageinput = new Scanner(System.in); 
    int i = 0; 
    do { 
     if (i == 0) { 
      System.out.println("Please enter your age"); 
      i++; 
     } else { 
      System.out.println("Please enter an integer"); 
      ageinput.next(); 
     } 
    } while (!ageinput.hasNextInt()); 
    System.out.println("You've entered a valid age"); 
    nameinput.close(); 
    ageinput.close(); 
} 
+0

我可以知道我的回答有什麼問題嗎?爲什麼-1?我寫了所有對他有用的東西......給了他他所問的3個實現......所有這些都被驗證了,甚至還建議他走的路?我錯過了什麼? – Abhishek

+0

首先,爲每次迭代創建一個新的'Scanner'沒有意義。儘管OP也犯了類似的錯誤。 – shmosel

+0

@shmosel - 我更正了我的答案。謝謝你改進我的回答 – Abhishek

1
String stringAge; 
do { 
    System.out.println("Please Enter an int"); 
    stringAge = ageinput.next(); 
} while (!stringAge.matches("^-?\\d+$")); //regex matches for - sign, and then a number 
System.out.println("You entered an int"); 
int age = Integer.parseInt(stringAge); 
+0

雖然正則表達式檢查可能對新手來說太過分了,但在這種情況下,do-while循環是很自然的事情。 +1。 – mtj

+0

我同意正則表達式的過度使用。 我只是認爲正則表達式會比捕捉錯誤或類似的東西更好 – dustinroepsch

0

首先,不需要使用多個Scanner對象封裝System.in輸入流。 (How to use multiple Scanner objects on System.in?

至於實際的代碼,這裏就是浮現在腦海:

public static void main(String args[]) { 

     Scanner scanner = new Scanner(System.in); 

     System.out.println("Please enter your name to begin:"); 
     String name = scanner.nextLine(); 
     System.out.println("Hello " + name + "!"); 

     System.out.println("Please enter your age:"); 
     int age; 
     while (true) { 
      try { // Try to read in the age. 
       age = scanner.nextInt(); 
      } catch (InputMismatchException ex) { // The input wasn't a valid integer; parsing the value failed. 
       System.out.println("Please enter an integer:"); 
       continue; // Attempt reading the age again. 
      } 
      break; // The input was a valid integer. Break out of the loop. 
     } 

     scanner.close(); 

     System.out.println("You've entered a valid age"); 
    } 
} 
相關問題