【问题标题】:Java - charAt(), equalsIgnoreCase, if statement testing?Java - charAt()、equalsIgnoreCase、if 语句测试?
【发布时间】:2015-01-23 17:20:28
【问题描述】:

我想要的是无论用户输入什么,如果他们输入的第一个字母是'y'或'n',无论大小写,它都会打印“游戏开始”。

我已经尝试使用带有“字母”变量的 equalsIgnoreCase(),但它给出了错误:无法取消引用 char。对此的任何建议将不胜感激!谢谢!

Scanner input = new Scanner(System.in);

System.out.println("Do you want to continue?");

String wesker = input.nextLine();
char letter = wesker.charAt(0);

 if(letter == 'y' || letter == 'p'){
     System.out.println("Game start");
 } else {
     System.out.println("Game over");
 }

【问题讨论】:

  • 应该是'p' 还是'n'
  • 您的代码检查yp..顺便说一句,为什么不检查YNyN

标签: java if-statement input equals charat


【解决方案1】:

尝试使用Character#toLowercase():

if (Character.toLowerCase(letter) == 'y' || Character.toLowerCase(letter) == 'n') {

if (Character.toUpperCase(letter) == 'Y' || Character.toUpperCase(letter) == 'N') {

或者干脆

if( letter == 'y' || letter == 'Y' || letter == 'n' || letter == 'N' )

【讨论】:

    【解决方案2】:

    只需检查两种情况:

    if( letter == 'y' || letter == 'Y' || letter == 'p' || letter == 'P' )
    

    【讨论】:

      【解决方案3】:

      equalsIgnoreCase 只能由字符串使用。对于您的情况,如果您想使用该方法,您可以这样做:

      Scanner input = new Scanner(System.in);
      String wesker = input.nextLine();
      String letter = wesker.substring(0,1);
      
      if(letter.equalsIgnoreCase("y") || letter.equalsIgnoreCase("n")){
          System.out.println("Game start");
      } else {
          System.out.println("Game over");
      }
      

      【讨论】:

        【解决方案4】:

        您可以预先构建一组可接受的字符。

        Set<Character> yes = new HashSet<>(Arrays.asList('y','Y','p','P'));
        
        public void test() {
            char letter = 'c';
            if ( yes.contains(letter)) {
        
            }
        }
        

        【讨论】:

        • 我猜想多了一点,我们可以找到一个更消耗资源的解决方案……
        • @Holger - 正在努力... :)
        • 如果您想针对预先构建的一组可接受的字符进行测试,您可以考虑"yYnN".indexOf(letter)!=-1。对于这么小的集合,散列并不比线性搜索快。
        • @Holger - 我也在考虑使用自定义比较器 - 但认为这有点太OTT了。 indexOf 的好点。
        猜你喜欢
        • 2018-10-31
        • 2017-08-20
        • 2023-03-25
        • 1970-01-01
        • 2016-08-16
        • 2019-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多