2012-10-15 164 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; 
    } 
}