JAVA:在Do While中使用字符串进行决策

JAVA:在Do While中使用字符串进行决策,java,do-while,Java,Do While,我得到了一个类似“无法解决退出”的错误。我的目标是循环,直到用户在该问题中输入y。String Exit必须在循环之外声明 System.out.println("Would you like to exit? "); String Exit = input.nextLine(); }while(Exit != 'y'); 如Kartik所述进行编辑: 应该使用等于来比较字符串。and==检查两个变量是否引用同一个对象。您的第一个问题是@Subin所涵盖的Exit的范

我得到了一个类似“无法解决退出”的错误。我的目标是循环,直到用户在该问题中输入
y

String Exit
必须在循环之外声明

    System.out.println("Would you like to exit? ");
    String Exit = input.nextLine();

}while(Exit != 'y');    
如Kartik所述进行编辑:
应该使用等于来比较字符串。and==检查两个变量是否引用同一个对象。

您的第一个问题是@Subin所涵盖的
Exit
的范围。您可能希望在(!Exit.equals(“y”);时使用
}


您可以查看原因。基本上,您的
!=
很可能总是正确的,因为它比较对象,从而确定它们是两个不同的对象。

首先,while
do…while
循环中的条件在外部范围内。这意味着在检查条件时,
do…while
不再在范围内。要解决此问题,需要在
do…while
循环之外声明
exit
变量:

String Exit =null;
do {
//body
Exit= input.next(); // or input.nextLine();
} while(!Exit.equals("y"));
    System.out.println("Would you like to exit? ");
    String Exit = input.nextLine();

}while(!Exit.equals('y');
但是,此代码仍然无法编译,因为
Exit
被声明为
字符串
,但您正在将其与
'y'
进行比较,后者是
字符
。字符串文本总是用双引号括起来,因此
“y”
是字符串

现在将条件更改为
Exit!=“y”
将进行编译,但它不会按预期运行。您需要使用
equals()
方法比较
String
s。这意味着条件应为
!Exit.equals(“y”)
。将其放置在
while
条件中应该可以解决循环中的问题


或者,如果要检查单词“是”或变体,可以使用
while(Exit.charAt(0)!=“y”);
。这将检查
Exit
中的第一个字符是否是“y”字符。

按照惯例,变量应该是小写的,您需要调用.equals函数来正确执行字符串比较。最后一段的注释:如果输入是“Yikes!不行!”?:p@code Guru编写的代码有效!…但没有循环…它直接再次转到菜单,而不要求我退出。如果我想退出,它会显示,但随后它会直接显示菜单。它看起来像exit=input.nextLine();未正确执行。添加
System.out.println(“退出值:+exit”)
Exit=input.nextLine()之后;
查看
Exit
的值。也许这会说明问题。顺便说一下:这不是语法规则,但通常以小写字母开头变量。只有类和常量(
final
)应该以大写字母开头。并告诉我们,您在while条件下发生了什么变化。@门把手是其他人添加的。对于这样的学校作业来说,这似乎是一种合理的方式。不过,我可能不会自己做。@user1947402请编辑您的问题,或者根据您的变化开始新的问题。@user1947402我已经提出并解释了当前的问题是什么。我们很乐意提供帮助。1.语法错误2.范围是本地的3.可能是从Karthik的答案复制的4.DownVoted@code Guru的代码工作了!…但是没有循环…它直接再次进入菜单而不要求我退出。如果我想退出,它会显示,但随后它会直接显示菜单。我t看起来像Exit=input.nextLine();未正确执行。
    System.out.println("Would you like to exit? ");
    String Exit = input.nextLine();

}while(!Exit.equals('y');
String Exit = null;

do {
    // do something
    Exit = input.nextLine();
} while (Exit != 'y');