无法将转换为bool的字符串插入JAVA中的if语句

无法将转换为bool的字符串插入JAVA中的if语句,java,string,boolean,Java,String,Boolean,我是初学者,如果这是显而易见的,我很抱歉。我有一个练习,我正试图完成,但似乎不明白。我已经搞定了程序的逻辑。我应该用6个蘑菇中的3个问题猜出某人在想什么类型的蘑菇 它们都有各自的特点。我在纸上有一个决策树,上面有是和否的答案,这将给我关于这个人在猜测什么的答案 我在Java中编写代码时遇到的问题是,我尝试使用的IF语句拒绝了我输入的变量字符串(类型不匹配),即使我将该字符串设置为布尔值也很难 我试过使用parse.Boolean()和Valueof()两种方法,但都不起作用。我只是试着去做 布尔

我是初学者,如果这是显而易见的,我很抱歉。我有一个练习,我正试图完成,但似乎不明白。我已经搞定了程序的逻辑。我应该用6个蘑菇中的3个问题猜出某人在想什么类型的蘑菇

它们都有各自的特点。我在纸上有一个决策树,上面有是和否的答案,这将给我关于这个人在猜测什么的答案

我在Java中编写代码时遇到的问题是,我尝试使用的IF语句拒绝了我输入的变量字符串(类型不匹配),即使我将该字符串设置为布尔值也很难

我试过使用
parse.Boolean()
Valueof()
两种方法,但都不起作用。我只是试着去做

布尔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”转换为“False” 似乎什么都不管用


谢谢你的帮助

只需将读到的行与要分析的单词进行比较即可

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

 }else{
      // Statements when false...
}

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

String Reponse1=clavier.nextLine();
if(“oui”.equals(Response1.toLowerCase())| |“yes”.equals(Response1.toLowerCase())){
//肯定回答
}否则{
//否定的
}
比较字符串而不是
Response1
不会引发异常,即使
Response1
将为
null
。不过,如果你愿意,你可以换个方式

if(Response1.toLowerCase().equals(“oui”)Response1.toLowerCase().equals(“yes”)){
//肯定回答
}否则{
//否定的
}

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

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

字符串的内容只是按顺序排列的字母。它们与变量的名称没有任何对应关系

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

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

哇,成功了!!它需要另一个)在结尾,因为(“是”)用光了括号,这让我有点紧张,但除此之外,谢谢主席先生,我能完成我的程序真是太神奇了,你回答得超快!!!有一个问题,这个函数中的.toLowerCase()是什么?我试过用大写字母,它也能用。。。给出了什么?这只是为了确保无论用户类型如何(是,是,是,是,是…),字符串的值都与代码中的文字值相同。非常感谢您的帮助!“一个对象的地址而不是字符串本身”是什么意思?@AndreaDavidEdelman每个对象在内存中都有一个唯一的地址。如果一个程序想要得到某个变量的值,它会通过这个地址来查找它的值。谢谢你,我注意到你没有像其他程序那样使用“to lower case”?为什么会这样?@AndreaDavidEdelman我确实用过它,但它就在
if
的正上方。行
Reponse1=Reponse1.toLowerCase()将小写版本存储在变量中。这有助于避免其他答案中的两种用法。他们的方法只是检查小写值,但不保留它,导致对另一个可能值的额外使用。避免重复可以帮助您的代码更容易理解和调试。啊,是的,我现在看到了,它确实更容易阅读!我想我会那样做的!谢谢