【问题标题】:Converting String to Char with If/Else Statement [duplicate]使用 If/Else 语句将字符串转换为字符 [重复]
【发布时间】:2024-01-20 21:27:02
【问题描述】:

我真的是编程新手,我一直在寻找解决我正在研究的这个实验室的方法。实验室非常简单,我相信我的逻辑已经失败,但是在执行我的代码时,我没有得到想要的结果。程序要求输入三个整数和一个字符。如果字符是“S”,程序将打印前 3 个整数的总和,如果字符是“P”,则乘积、“A”、平均值,任何其他字符都会打印错误。

下面是我的代码。它要求输入三个整数和一个字符,但结果始终是错误,即使我输入了“S”、“P”或“A”。

任何帮助将不胜感激。

谢谢, 乔

    int n1, n2, n3;
    String numberFromKB;
    String charFromKB;
    Scanner keyboard = new Scanner (System.in);

    numberFromKB = JOptionPane.showInputDialog("Enter the first number.");
    n1 = Integer.parseInt(numberFromKB);

    numberFromKB = JOptionPane.showInputDialog("Enter the second number.");
    n2 = Integer.parseInt(numberFromKB);

    numberFromKB = JOptionPane.showInputDialog("Enter the 3rd number.");
    n3 = Integer.parseInt(numberFromKB);

    charFromKB = JOptionPane.showInputDialog(null, "Enter a character:");
    if (charFromKB = "s")
    {
        System.out.println("Sum of integers is: " + n1 + n2 + n3);
    }
    else if (charFromKB = "p")
    {
        System.out.println("Product of integers is: " + n1 * n2 * n3);
    }
    else if (charFromKB = "a")
    {
        System.out.println("Average of integers is: " + ((n1 + n2 + n3)/3f));
    }
    else 
    {
        System.out.println("ERROR!");
    }

}

}

【问题讨论】:

  • 您不能在if 子句中使用=。你可能想像这样使用.equals()charFromKB.equals("s")
  • 这还能编译吗?
  • 另见 = 和 == 之间的区别

标签: java string if-statement char


【解决方案1】:

您正在使用等于运算符,因此将 charFromKB 分配给等于“S”

你应该使用字符串 equals 方法,切换这个:

if (charFromKB = "s")
{
        System.out.println("Sum of integers is: " + n1 + n2 + n3);
}

用这个:

if (charFromKB.equals("s"))
{
       System.out.println("Sum of integers is: " + n1 + n2 + n3);
{

等号运算符“==”不适用于字符串。更多信息请关注link

【讨论】:

  • 我可以发誓我之前使用过 .equals() 并且它不起作用,但这次它起作用了。非常感谢 Serj!
【解决方案2】:

使用equals比较两个String。在你的情况下:if (charFromKB.equals("s"))

    int n1, n2, n3;
    String numberFromKB;
    String charFromKB;

    String result = "";
    try {
        numberFromKB = JOptionPane.showInputDialog("Enter the first number.");
        n1 = Integer.parseInt(numberFromKB);

        numberFromKB = JOptionPane .showInputDialog("Enter the second number.");
        n2 = Integer.parseInt(numberFromKB);

        numberFromKB = JOptionPane.showInputDialog("Enter the 3rd number.");
        n3 = Integer.parseInt(numberFromKB);

        charFromKB = JOptionPane.showInputDialog(null, "Enter a character:");

        if (charFromKB.equalsIgnoreCase("s")) {
            result = "Sum of integers is : " + (n1 + n2 + n3);
        } else if (charFromKB.equalsIgnoreCase("p")) {
            result = "Product of integers is: " + (n1 * n2 * n3);
        } else if (charFromKB.equalsIgnoreCase("a")) {
            result = "Average of integers is: "+ ((n1 + n2 + n3) / 3);
        } else {
            result = "ERROR";
        }
    } catch (Exception e) {
        result = "ERROR";
    }

    JOptionPane.showMessageDialog(null, result);

【讨论】:

    【解决方案3】:

    首先,你的 if 语句是错误的:

    = 用于赋值,所以使用 == 代替比较。

    另外,双引号 "" 用于表示字符串,因此请使用单引号 '' 来表示字符。

    if (charFromKB == 's') { ... }
    

    其次,小写的“s”、“p”和“a”与大写的“S”、“P”和“A”不同。

    如果您只想阅读大写字母,则需要指定。

    if (charFromKB == 'A') { ... }
    

    如果你想让这些字母不区分大小写,你有两种选择:

    if (charFromKB == 'A' || charFromKB == 'a') { ... }
    
    if (Character.toLowerCase(charFromKB) == 'a') { ... }
    

    【讨论】:

    • charFromKB 是一个字符串,因此您无法将其与 char 进行比较
    【解决方案4】:

    尝试在 if() 中使用 == 运算符代替 =,所以代替

     charFromKB = "p"
    

    charFromKB == "p"
    

    【讨论】:

    • 感谢您的回复!我最初使用 == 操作数,但遇到了同样的问题。我的意思是我要一个字符串,我是说如果字符串是 S、A 或 P,运行 println。除非我错了。
    • 字符串比较应该使用Java中的equals方法,而不是使用引用相等。
    • 好吧,我没用过java,这是为什么呢?
    • @MauroF 因为如果使用 == 比较两个 不同 字符串对象,即使两个对象包含相同的文本,也会返回 false。这就是为什么 java 对象有一个 equals 方法 - 比较内容相等的不同对象