无法将转换为bool的字符串插入JAVA中的if语句
我是初学者,如果这是显而易见的,我很抱歉。我有一个练习,我正试图完成,但似乎不明白。我已经搞定了程序的逻辑。我应该用6个蘑菇中的3个问题猜出某人在想什么类型的蘑菇 它们都有各自的特点。我在纸上有一个决策树,上面有是和否的答案,这将给我关于这个人在猜测什么的答案 我在Java中编写代码时遇到的问题是,我尝试使用的IF语句拒绝了我输入的变量字符串(类型不匹配),即使我将该字符串设置为布尔值也很难 我试过使用无法将转换为bool的字符串插入JAVA中的if语句,java,string,boolean,Java,String,Boolean,我是初学者,如果这是显而易见的,我很抱歉。我有一个练习,我正试图完成,但似乎不明白。我已经搞定了程序的逻辑。我应该用6个蘑菇中的3个问题猜出某人在想什么类型的蘑菇 它们都有各自的特点。我在纸上有一个决策树,上面有是和否的答案,这将给我关于这个人在猜测什么的答案 我在Java中编写代码时遇到的问题是,我尝试使用的IF语句拒绝了我输入的变量字符串(类型不匹配),即使我将该字符串设置为布尔值也很难 我试过使用parse.Boolean()和Valueof()两种方法,但都不起作用。我只是试着去做 布尔
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()代码>将小写版本存储在变量中。这有助于避免其他答案中的两种用法。他们的方法只是检查小写值,但不保留它,导致对另一个可能值的额外使用。避免重复可以帮助您的代码更容易理解和调试。啊,是的,我现在看到了,它确实更容易阅读!我想我会那样做的!谢谢