【问题标题】:Java issue with scanner扫描仪的 Java 问题
【发布时间】:2012-10-05 03:12:59
【问题描述】:

我有一个方法应该扫描 3 个大写或小写字母中的一个并返回该字母的小写版本。如果输入了不正确的字母,则警告用户并重新要求输入字母。我有两个问题,1:只要运行该方法,我就会得到带有错误消息的输出行,该错误消息告诉用户输入无效,而无需等待输入! (所以第二次运行该方法我在输入任何内容之前看到High, low or sevens (H/L/S):Invalid entry. Please try again using H/L/S! 然后再次调用该方法并且除了我的下一个问题之外所有工作正常) 2:从扫描仪获取的条目永远不会通过我的任何 if声明,即使它应该这样做。

我的代码:

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;
}

【问题讨论】:

    标签: java java.util.scanner


    【解决方案1】:

    你可以像这样使用'else'来代替使用while()-

    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);
        }   
    }
    

    【讨论】:

    • 谢谢,所有的好答案我真的很喜欢你的建议,因为我不知道你能做到这一点,这将对我未来有很大帮助!
    【解决方案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);
    

    【讨论】:

    • @user860869 检查更新的代码,我认为它满足您的所有要求。
    • 我在辩论它,这实际上重写了我所做的一切,我更喜欢另一个答案,因为我不仅在寻找解决方案,而且在寻找理解。我投了赞成票,非常感谢您的帮助!
    【解决方案3】:
    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!");
        }
    }
    

    【讨论】:

    • 好的,这个作品你能解释一下有什么不同吗?
    • 没什么,只是放入循环并添加了中断。
    【解决方案4】:

    嘿,你根本没有跳出 while 循环。你看到了吗?

    【讨论】:

    • 怎么样?如果 result='l''s''h' 不应该打破循环?
    【解决方案5】:

    这就是你想要的。这是迭代字符串中字符的程序。如果它们是 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多