我正在为一个课程项目做最后润色,我正在为我的一个用户输入添加一个安全网。我设置它,以便如果用户输入“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;
我一直在阅读有关操作数和逻辑的内容,但我有点卡住了。我一直在唠叨我的老师,所以我想我会给他一个假期,因为我不是他唯一的学生。我的错误是“二元运算符的错误操作数类型'||'。
答案 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!= 1
和a!= 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);