【问题标题】:Unable to plug string converted to bool into if statement in JAVA无法将转换为布尔值的字符串插入 JAVA 中的 if 语句
【发布时间】:2020-02-05 04:16:25
【问题描述】:

如果这很明显,我是初学者抱歉。我有一个练习,我正在尝试完成,但似乎无法弄清楚。我已经搞定了程序的逻辑。我应该用 6 个蘑菇中的 3 个问题来猜测某人在想什么类型的蘑菇。

他们都有自己的特点。我有一个决策树,纸上有“是”和“否”的答案,可以告诉我这个人在猜什么。

我在尝试用 Java 编写代码时遇到的问题是,我尝试使用的 IF 语句拒绝了我正在输入的变量字符串(类型不匹配),即使我已经使该字符串等于布尔值。

我已尝试使用 parse.Boolean()Valueof(),但都没有奏效。我试过简单地做

boolean oui = true;

然后我尝试了

import java.util.Scanner;

public class Champi {

    public static void main(String[] args) {

        Scanner clavier = new Scanner(System.in);

        System.out.println("Pensez a un champignon : amanite tue mouches, pied bleu, girolle,");
        System.out.println("cèpe de Bordeaux, coprin chevelu ou agaric jaunissant.");

        boolean oui = true;
        boolean Oui = true;
        boolean non = false;
        boolean Non = false;



        System.out.print("Est-ce que votre champignon a un anneau (true : oui, false : non) ? ");
        String Reponse1 = clavier.nextLine(); 

        if (Reponse1) {
            System.out.print("l'agaric jaunissant");
        }
        else {
            System.out.print("l'amanite tue-mouches");}

当然,期望的行为是用户在输入中输入“Yes”或“oui”(因为这是用法语完成的),并且 IF 语句将其转换为“True”或“No”转换为“错误的” 似乎没有任何效果!

感谢您的帮助。

【问题讨论】:

    标签: java string boolean


    【解决方案1】:

    这不起作用的原因是因为输入的值保存在变量Reponse1 中。即使文本可能与变量的名称相同,它也不会成为该变量。

    字符串的内容只是按顺序排列的字母。它们不以任何方式对应于变量的名称。

    您可以在字符串上使用toLowerCase() 将其转换为全小写字母,这样可以避免大小写差异。 然后,要检查一个字符串是否与另一个匹配,只需使用equals 方法。

    String Reponse1 = clavier.nextLine();
    Reponse1 = Reponse1.toLowerCase();
    if(Reponse1.equals("oui") || Reponse1.equals("yes")) {
    

    【讨论】:

    • 谢谢你,我注意到你不像其他人那样使用“小写”?为什么会这样?
    • @AndreaDavidEdelman 我确实使用过它,但它就在if 的正上方。 Reponse1 = Reponse1.toLowerCase(); 行将小写版本存储在变量中。这有助于避免其他答案的 2 种用途。他们的方法只是检查小写值但不保留它,导致额外使用另一个可能的值。避免重复有助于使您的代码更易于理解和调试。
    • 啊,是的,我现在看到了,太棒了,它确实更容易阅读!我想我会那样做的!谢谢!
    【解决方案2】:

    在 java 中,if 语句只接受布尔类型。在您的情况下,您试图将 String 对象传递给 if 语句。 从逻辑上看,我认为您首先尝试用法语解析是/否。因此,您可以通过将字符串检查传递给 if 语句来组合这两个过程:

    String Reponse1 = clavier.nextLine();
    if("oui".equals(Response1.toLowerCase()) || "yes".equals(Response1.toLowerCase())) {
        //positive answer
    } else {
    //negative
    }
    

    即使Response1null,比较字符串而不是Response1 也不会引发异常。不过,如果你愿意,你可以反过来做

    if(Response1.toLowerCase().equals("oui") Response1.toLowerCase().equals("yes")) {
        //positive answer
    } else {
    //negative
    }
    

    但是请注意,在比较字符串时不能使用==,因为它将比较对象的地址而不是字符串本身。

    【讨论】:

    • 非常感谢您的帮助! “对象的地址而不是字符串本身”是什么意思。 ?
    • @AndreaDavidEdelman 每个对象在内存中都有一个唯一的地址。如果一个程序想要获取某个变量的值,它会通过这个地址来查找它的值。
    【解决方案3】:

    只需将读取的行与您要分析的单词进行比较。

     if(Response1.toLowerCase().equals("oui") || Response1.toLowerCase().equals("yes")){
           //Statements when true...
    
     }else{
          // Statements when false...
    }
    

    【讨论】:

    • 哇,它成功了!最后需要另一个),因为(“是”)用完了括号,这让我有点失望,但除此之外,谢谢先生,我能完成我的程序真是太棒了,你回答得超级快!!!
    • 一个问题,这个函数中的 .toLowerCase() 是什么?我试过用大写字母,它也可以……什么给了?
    • 这只是为了确保无论用户输入的方式如何(是,是,yEs,yeS,YES...),字符串都将与代码中的文字值相同。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2020-05-28
    • 2021-01-01
    • 2019-07-24
    • 2019-08-04
    • 2018-09-07
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多