2012-10-15 203 views
1

我是新來的java,所以請裸露在我身邊。我有一種方法,應該掃描三個大寫或小寫字母之一,並返回小寫字母的版本。如果輸入了不正確的字母,用戶將被警告並重新進行評估。我有兩個問題,1:一旦方法運行,我得到輸出的行並顯示錯誤消息,告訴用戶輸入無效,無需等待輸入! (所以第二個方法運行,我看到High, low or sevens (H/L/S):Invalid entry. Please try again using H/L/S!之前輸入任何東西,然後方法再次召回,除了我的下一個問題,除了我的下一個問題,所有工作正常)2:從掃描儀獲得的條目從來沒有通過我的任何if語句甚至儘管它應該。掃描儀的Java問題

我的代碼:

private static char getHighLow(Scanner inScanner) { 
    System.out.print("High, low or sevens (H/L/S):"); 
    String entered = inScanner.nextLine(); 
    System.out.print(entered); 
    if(entered.equals("H") || entered.equals("h")){ 
     return 'h'; 
    } 
    else if (entered.equals("L") || entered.equals("l")){ 
     return 'l'; 
    } 
    else if(entered.equals("S") || entered.equals("s")){ 
     return 's'; 
    } 

     char result = 0; 
     while(result != 'l' || result != 'h' || result != 's'){ 
     System.out.println("Invalid entry. Please try again using H/L/S!"); 
     result=getHighLow(inScanner); 
    } 
     return result; 
} 

回答

2

而不是使用一段時間(),你可以用「其他」像這個 -

private static char getHighLow(Scanner inScanner) { 
    System.out.print("High, low or sevens (H/L/S):"); 
    String entered = inScanner.nextLine(); 
    System.out.print(entered); 
    if(entered.equals("H") || entered.equals("h")){ 
     return 'h'; 
    } 
    else if (entered.equals("L") || entered.equals("l")){ 
     return 'l'; 
    } 
    else if(entered.equals("S") || entered.equals("s")){ 
     return 's'; 
    } 
    else { 
     System.out.println("Invalid entry. Please try again using H/L/S!"); 
     return getHighLow(inScanner); 
    } 
} 
+0

謝謝,所有的好答案我真的很喜歡你的建議,因爲我不知道你可以這樣做,這將在未來幫助我很多! – Osman

2

您可以簡單地使用equalsIgnoreCase和修剪輸入的字符串。並添加一個while循環util你的條件滿意。

Scanner scanner = new Scanner(System.in); 
    boolean loop = true; 
    String choice = null; 
    while (loop) { 
     System.out.print("High, low or sevens (H/L/S):"); 
     choice = scanner.nextLine(); 
     if ("H".equalsIgnoreCase(choice.trim()) 
       || "L".equalsIgnoreCase(choice.trim()) 
       || "S".equalsIgnoreCase(choice.trim())) { 
      System.out.println("Correct Choice"); 
      loop = false; 
     } 
     else 
     { 
      System.out.println("Wrong Choice"); 
     } 
    } 
    System.out.print(choice); 
+0

感謝您的提示,但這並不能解決我的問題。 – Osman

+0

@ user860869檢查更新後的代碼我認爲它滿足您的所有要求。 –

+0

感謝即時工作,雖然它現在 – Osman

1
char result; 
while(true){ 
    System.out.print("High, low or sevens (H/L/S):"); 
    String entered = inScanner.nextLine(); 
    System.out.print(entered); 
    if(entered.equals("H") || entered.equals("h")){ 
     result = 'h';break; 
    } 
    else if (entered.equals("L") || entered.equals("l")){ 
     result = 'l';break; 
    } 
    else if(entered.equals("S") || entered.equals("s")){ 
     result = 's';break; 
    }else{ 
     System.out.println("Invalid entry. Please try again using H/L/S!"); 
    } 
} 
+0

好的這個作品,你能向我解釋有什麼區別嗎? – Osman

+0

沒有什麼只是放入循環,並增加了休息。 –

0

嘿,你不打破while循環的根本。你看到了嗎 ?

+0

怎麼樣?如果'result ='l''或''s''或''h''不應該打破循環? – Osman

+0

對不起。我在運行代碼時遺漏了一些東西。 – sakthisundar

0

這是你想要的。這裏是迭代字符串中的字符的程序。如果它們是H,L或S,則將它們轉換爲小寫字母。

package testproj; 

import java.util.Scanner; 

public class TestProj { 

    public static void main(String[] args) { 
     Scanner scanner = new Scanner("HLs"); 
     String result = getHighLow(scanner); 
     System.out.println("Result :"+result); 
    } 

    private static String getHighLow(Scanner inScanner) { 
     System.out.println("High, low or sevens (H/L/S):"); 

     String entered; 
     String result = ""; 
     boolean isCharFound = false; 
     String temp = ""; 
     while (inScanner.hasNext()) { 
      temp = inScanner.next(); 

      System.out.println(temp); 

      for (int index = 0; index < temp.length(); index++) { 
       entered =new Character(temp.charAt(index)).toString() ; 


       if (entered.equals("H") || entered.equals("h")) { 
        result = result + 'h'; 
        isCharFound = true; 
       } else if (entered.equals("L") || entered.equals("l")) { 
        result = result + 'l'; 
        isCharFound = true; 
       } else if (entered.equals("S") || entered.equals("s")) { 
        result = result + 's'; 
        isCharFound = true; 
       } 

       if (!isCharFound) { 
        System.out.println("Invalid entry. Please try again using H/L/S!"); 
       } 

       isCharFound = false; 
      } 


     } 

     return result; 
    } 
}