在输入不是a或b时进行循环?

时间:2013-02-23 21:02:07

标签: java boolean-logic

我正在为一个课程项目做最后润色,我正在为我的一个用户输入添加一个安全网。我设置它,以便如果用户输入“1”或“2”,他们输入的数据将以不同的方式显示。我想添加一个方法,阻止用户输入“1”或“2”以外的任何内容。这是它的代码。

do
{
System.out.println("Please type either '1' or '2'.");
Scanner scan = new Scanner(System.in);
a = scan.nextInt();
}
while (a != (1||2));
//after user enters 1 or 2, return the choice
return a;

我一直在阅读有关操作数和逻辑的内容,但我有点卡住了。我一直在唠叨我的老师,所以我想我会给他一个假期,因为我不是他唯一的学生。我的错误是“二元运算符的错误操作数类型'||'。

8 个答案:

答案 0 :(得分:7)

这是学习编程时常见的误解。

作为人类,您可以轻松阅读如下所示的语句:“虽然a不是1或2”,但计算机必须遵循某些规则,其中一条规则是“或”优先

这意味着它首先要找出“1或2”的含义,因为基本上,你的陈述与此类似:

while (a != SOMETHING);
Java语言中的

||是“逻辑或”,转换为:在||(称为运算符)的每一侧取两个值(称为操作数),并将它们组合在一起根据“逻辑或”的规则。

“logical或”使用两个布尔值,它们只能是True或False,并且由于您要求它将运算符与数字一起使用,这就是您获得该特定错误消息的原因。

如果您尝试使用单个管道|,编译器可能已经停止抱怨,但它仍然无法按照您的意愿执行。

1 or 2在处理数字时,使用|运算符(“按位或”运算符),您将得到两个数字组合形成数字3.您可以阅读更多关于“按位运算符“如果你想知道原因。

简而言之,你不能这样写你的比较。

在编程语言中,比较一次完成两个值,即。一个对另一个,所以你唯一的选择是扩展表达式以进行两次比较。

这里有一些等价的表达式可以满足您的需求:

while (a != 1 && a != 2);

或者这个:

while (!(a == 1 || a == 2));

要成为hones,我更喜欢第一个。

答案 1 :(得分:0)

它是(a != 1 && a!=2) - 当a为1或2时,你实际上想要退出循环。

答案 2 :(得分:0)

您需要为a!= 1a!= 2单独设置条件语句。

你的条件陈述应该是这样的:

(a!=1) && (a!=2)

答案 3 :(得分:0)

这里的问题是你正在尝试编写有意义的代码作为英语,但它不能像那样工作。 ||运算符接受两个表达式,如果其中一个是true则返回。这意味着你所写的内容没有意义。

替换它的最简单方法是将其展开:

a != 1 && a != 2

(我们需要使用&&,因为我们检查它们都不是真的。)

请注意,这可能会变得冗长和笨拙。或者,一个好的替代品(假设您有很多要检查的值)是集合中的成员资格检查(Set是一个很好的选择,因为您可以保证进行O(1)成员资格测试。 E.g:

Set<Integer> possibles = new HashSet<Integer>();
Collections.addAll(possibles, new Integer[] {1, 2, ...});
while (!possibles.contains(a)) {
    ...

答案 4 :(得分:0)

您无法将int视为伪 - regex。取代

while (a != (1||2));

while (a != 1 && a!= 2);

答案 5 :(得分:0)

在你的while循环条件中尝试这个

((a!=1) && (a!=2))

答案 6 :(得分:0)

你必须写

while (a != 1 && a != 2)

因为它相当于 (a == 1 || a == 2)

答案 7 :(得分:0)

二元运算符'||'两侧都需要两个布尔操作数。由于您的操作数是整数,因此这是语法错误。

你应该这样做:

do{
// core of the loop...
}while(a!=1 && a!=2);