【问题标题】:Unable to compare Char / String? [duplicate]无法比较字符/字符串? [复制]
【发布时间】:2014-01-19 13:59:15
【问题描述】:

我想要做的只是读取一个输入(Char/String,最好是 char),它是一个单个字符,然后根据输入打印一些输出。我面临的问题是,如果我将输入的“选择”转换为字符,我的错误消息是:

类型不匹配:无法从 String 转换为 char 不兼容的操作数类型 char 和 String

知道有什么问题吗?谢谢!

*如果我这样离开它只会给我“无效的选择”

import java.util.*;

public class P1 {

    public static void main(String[] args) {

        // Create a scanner
        Scanner userInputScanner = new Scanner(System.in);
        String choice = userInputScanner.nextLine();

        System.out.println("Your choice is " + choice);

        if ((choice == "A") || (choice == "a"))
            System.out.println( " Action Movie Fan"); 
             else if ((choice == "C") || (choice == "c")) 
                 System.out.println( " Comedy movie fan ");
            else if ((choice == "D") || (choice == "d")) 
                 System.out.println(" Drama movie fan "); 
             else 
                 System.out.println( "Invalid choice" );


    }

}

【问题讨论】:

  • 我认为您提供的代码的 sn-p 不会出错。但是使用equals()(在这种情况下equalsIgnoreCase() 更适合你)来比较字符串值。
  • nextLine() 将返回 String 如果你想输入为 Char 你必须读取 String 然后 String.toCharArray().[0]会让你的角色回到第一个位置

标签: java string char


【解决方案1】:

在 Java 中使用 equals 比较字符串:

if ("A".equals(choice) || "a".equals(choice)) {
    ...
}

equalsIgnoreCase:

if ("A".equalsIgnoreCase(choice)) { // "a".equalsIgnoreCase(choice) works too
    ...
}

但是,在您的情况下,您需要比较单个字符,因此您可以这样做:

if (choice.length() == 1) {
    // Convert to upper case for case insensitivity
    char selection = Character.toUpperCase(choice.charAt(0));
    switch (selection) {
    case 'A':
        ...
        break;
    case 'C':
        ...
        break;
    case 'D':
        ...
        break;
    }
    ...
}

【讨论】:

  • 太棒了!这行得通!
  • @user2999509 欢迎您!如果您的问题已解决,请考虑通过单击旁边的灰色复选标记来接受答案。这将使其他网站访问者知道您不再积极寻找解决问题的改进方案,并为您赢得 Stack Overflow 上的全新徽章。
【解决方案2】:

对于您的情况,请尝试使用 String.equalsIgnoreCase。 您可能还想探索 Enum 的用法。

【讨论】:

    【解决方案3】:
    import java.util.*;
    
    public class P1 {
    
        public static void main(String[] args) {
    
            // Create a scanner
            Scanner userInputScanner = new Scanner(System.in);
            String choice = userInputScanner.nextLine();
    
            System.out.println("Your choice is " + choice);
    
            if (choice.trim().equalsIgnorecase("A"))
                System.out.println( " Action Movie Fan"); 
            else if (choice.trim().equalsIgnorecase("B")) 
                System.out.println( " Comedy movie fan ");
            else if (choice.trim().equalsIgnorecase("D")) 
                System.out.println(" Drama movie fan "); 
            else 
                System.out.println( "Invalid choice" );
    
        }
    }
    

    否则只比较字符串的第一个字符,如choice.charAt(0) == 'A'

    【讨论】:

      【解决方案4】:

      你应该知道“A”和“a”不是字符,它们是字符串。您应该做的是调用 String 的 equals()(而不是 == 运算符)方法进行比较。就这样:

      if(stringOne.equalsIgnoreCase("A")) {
          //methods
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 2017-11-19
        • 2013-07-28
        • 2015-04-21
        相关资源
        最近更新 更多