2014-04-14 23 views
0

我是一個絕對的初學者,沒有任何編程語言的經驗。輸入字符串而不是整數(Java)

我寫了一個程序作爲將阿拉伯數字轉換成羅馬數字的練習。有用。不過,如果輸入字符串而不是整數,我想添加一個用於處理問題的部分。不知道如何做到這一點。我試圖使用try/catch,但我不知道如何正確使用它。現在程序要我兩次輸入一個數字。該怎麼辦?

這裏是他的主要方法:

public static void main(String[] args) { 

    int numArabic; 
    boolean validEntry; 

    try { 
      System.out.println("Enter an integer number between 1 and 3999!"); 
      Scanner scan = new Scanner(System.in); 
      numArabic = scan.nextInt(); 
      validEntry = true; 
     } catch (InputMismatchException e) { 
      System.out.println("Entered value is not an integer!"); 
     } 

    System.out.println("Enter an integer number between 1 and 3999!"); 
    Scanner scan = new Scanner(System.in); 
    numArabic = scan.nextInt();        

    if ((numArabic < 1) || (numArabic > 3999)) { 
      System.out.println(); 
      System.out.print("Wrong number. "); 
      System.out.print("Enter an integer number between 1 and 3999!"); 
      System.out.println(); 
      } 
    else { 
      String numRoman1 = toRomanOne(numArabic % 10); 
      String numRoman2 = toRomanTwo(((numArabic/10) % 10)); 
      String numRoman3 = toRomanThree(((numArabic/100) % 10)); 
      String numRoman4 = toRomanFour(numArabic/1000); 
      System.out.print("The number " + numArabic + " is equal to: "); 
      System.out.print(numRoman4+numRoman3+numRoman2+numRoman1 + "."); 
    } 
} 
+2

現在程序要我兩次輸入一個數字。那是因爲你在做 - System.out.println(「輸入1到3999之間的整數!」); Scanner scan = new Scanner(System.in); numArabic = scan.nextInt();兩次 – TheLostMind

+0

運行: 輸入1到3999之間的整數! jjk 輸入的值不是整數 輸入1到3999之間的整數! KKJ 異常在線程 「主」 java.util.InputMismatchException \t在java.util.Scanner.throwFor(Scanner.java:864) \t在java.util.Scanner.next(Scanner.java:1485) \t在java.util.Scanner.nextInt(Scanner.java:2117) \t在java.util.Scanner.nextInt(Scanner.java:2076) \t在arabictoroman.ArabicToRoman.main(ArabicToRoman.java:35) Java結果:1 – maxval

+0

「那是因爲你在做 - System.out.println(」輸入1到3999之間的整數!「); Scanner scan = new Scanner(System.in); numArabic = scan.nextInt();兩次」好的,但該怎麼辦?如果我不再問它,我會得到「變量未初始化」。 – maxval

回答

1

您的控制機制是真實的,但只能使用一次。你必須把它放在一個循環中,以便它可以允許用戶最後輸入一個整數。

boolean validEntry; 

do { 
    try { 
     System.out.println("Enter an integer number between 1 and 3999!"); 
     Scanner scan = new Scanner(System.in); 
     numArabic = scan.nextInt(); 
     validEntry = true; 
    } 
    catch (InputMismatchException e) { 
     validEntry = false; 
     System.out.println("Entered value is not an integer!"); 
    } 
} 
while(!validEntry); 
+0

+1通過不改變OP的代碼來提供答案。 –

0

您可以使用Scanner#hasNextInt()方法來檢查。

如果此掃描器輸入中的下一個標記可被解釋爲int值,則此方法返回true

if (scan.hasNextInt()) { 
    // Do the process with Integer. 
} else { 
    // Do the process if it is not an Integer. 
} 

需要注意的是,這將覆蓋所有這一切都沒有Integer的投入,不僅String

+1

謝謝,這有助於。 – maxval

0
public static void main(String[] args) { 

    int numArabic; 
    boolean validEntry = false; 

    while (validEntry = false){ 
    try { 

      System.out.println("Enter an integer number between 1 and 3999!"); 
      Scanner scan = new Scanner(System.in); 
      numArabic = scan.nextInt(); 
      validEntry = true; 
     } 

     catch (InputMismatchException e) { 
      System.out.println("Entered value is not an integer!"); 
      validEntry = false; 
     } 
    }     

    if ((numArabic < 1) || (numArabic > 3999)) { 
      System.out.println(); 
      System.out.print("Wrong number. "); 
      System.out.print("Enter an integer number between 1 and 3999!"); 
      System.out.println(); 
      } 
    else { 
      String numRoman1 = toRomanOne(numArabic % 10); 
      String numRoman2 = toRomanTwo(((numArabic/10) % 10)); 
      String numRoman3 = toRomanThree(((numArabic/100) % 10)); 
      String numRoman4 = toRomanFour(numArabic/1000); 
      System.out.print("The number " + numArabic + " is equal to: "); 
      System.out.print(numRoman4+numRoman3+numRoman2+numRoman1 + "."); 
    } 
} 
+0

錯誤的答案請運行它不在裏面的程序。 – Benjamin

0

試試這個:

 boolean b=true; 
    while(b) 
    { 
     try 
     { 
     System.out.println("Enter an integer number between 1 and 3999!"); 
     Scanner scan = new Scanner(System.in); 
     numArabic = scan.nextInt(); 
     validEntry = true; 
     } 
     catch (InputMismatchException e) 
     { 
      System.out.println("Entered value is not an integer!"); 

     } 
     if(validEntry) 
     { 
     if ((numArabic < 1) || (numArabic > 3999)) 
     { 
     System.out.println(); 
     System.out.print("Wrong number. "); 
     System.out.print("Enter an integer number between 1 and 3999!"); 
     System.out.println(); 
     } 
     else 
     { 
     String numRoman1 = toRomanOne(numArabic % 10); 
     String numRoman2 = toRomanTwo(((numArabic/10) % 10)); 
     String numRoman3 = toRomanThree(((numArabic/100) % 10)); 
     String numRoman4 = toRomanFour(numArabic/1000); 
     System.out.print("The number " + numArabic + " is equal to: "); 
     System.out.print(numRoman4+numRoman3+numRoman2+numRoman1 + "."); 
     } 
     b=false; 
    }//end of if 
}//end of while 
-1

試試這個,

你需要先初始化numArabic一些價值。

public static void main(String[] args) { 
    int numArabic = 0; 
    boolean validEntry; 

    try { 
     System.out.println("Enter an integer number between 1 and 3999!"); 
     Scanner scan = new Scanner(System.in); 
     numArabic = scan.nextInt(); 
     validEntry = true; 
    } 

    catch (InputMismatchException e) { 
     System.out.println("Entered value is not an integer!"); 
    } 


    if ((numArabic < 1) || (numArabic > 3999)) { 

    } else { 

    } 

} 
-1

你輸入什麼程序是從語法錯誤和邏輯errors.But免費問只有一次進入整數值只是重寫代碼following.We在捕捉附着第二SOP功能block.So如果輸入不匹配,它會要求再次輸入。 public static void main(String [] args){

int numArabic; 
    boolean validEntry; 

    try { 
      System.out.println("Enter an integer number between 1 and 3999!"); 
      Scanner scan = new Scanner(System.in); 
      numArabic = scan.nextInt(); 
      validEntry = true; 
     } catch (InputMismatchException e) { 
      System.out.println("Entered value is not an integer!"); 


System.out.println("Enter an integer number between 1 and 3999!"); 
     Scanner scan = new Scanner(System.in); 
     numArabic = scan.nextInt(); 
     } 
相關問題