Java - 与If语句一起使用的布尔值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 与If语句一起使用的布尔值相关的知识,希望对你有一定的参考价值。
我刚开始在学校学习Java,我遇到了以下代码。我无法理解为什么输出显示:no
。由于x
更新为100
不应该boolean
更新到false
因此输出:yes
?
先感谢您
这是我的代码:
public static void main (String[] args)
{
Scanner keyboard = new Scanner(System.in);
int x = -555;
boolean isNegative = (x < 0);
if (isNegative)
{
x = 100;
if (isNegative)
System.out.println("no");
else
System.out.println("yes");
}
else
System.out.println("maybe");
}
所以,在检查它是否为负数之前,你将x
设置为-555
。然后将布尔值isNegative
设置为x是否小于0,此时它将为false。您稍后在程序中更新x,以便if语句不受影响。之所以说不,是因为它给出的是否定的,在整个程序中没有更新。请记住Java从上到下运行。
我注意到的一点是,打印出yes或no的代码在代码块中,如果它是负数则运行。你可能想解决这个问题。
虽然整数x
更新,布尔isNegative
不是。即使x
后来被设置为100,isNegative
已经被设置为true
,在那一行boolean isNegative = (x<0);
之后,isNegative
不再依赖于x
的价值。
在下面的代码中,输出是"yes"
,因为isNegative
在x
更新后更新。
int x = -555;
boolean isNegative = (x < 0);
if (isNegative)
{
x = 100;
isNegative = (x<0);
if (isNegative)
System.out.println("no");
else
System.out.println("yes");
}
else
System.out.println("maybe");
并且忽略了我的格式错误,这是我第一次回答;)
在功能上,你可以声明一个IntPredicate:
IntPredicate negative = (i)-> i < 0;
注意军事箭头操作员! :)
用法:
negative.test (-500)
negative.test (500)
编程中的谓词通常是一个方法/函数,它为某些输入返回一个布尔值。输入在这里是一个int,对于基本类型,有一个专门的谓词,如IntPredicate。
虽然可能有一些简短的结构,但整体开销很高。比较你自己:
示例代码:
boolean isNegative = (x < 0);
if (isNegative)
{
x = 100;
if (isNegative)
System.out.println("no");
else
System.out.println("yes");
}
else
System.out.println("maybe");
精益代码:
if (x < 0)
{
x = 100;
if (x < 0)
System.out.println("no");
else
System.out.println("yes");
}
else
System.out.println("maybe");
谓词用法:
IntPredicate negative = (i)-> i < 0;
if (negative.test (x))
{
x = 100;
if (negative.test (x))
System.out.println("no");
else
System.out.println("yes");
}
else
System.out.println("maybe");
它确实适用于更复杂的测试,你只需要编写一次,而不是像(x <0)那样自我记录,并且可以组合一堆这样的测试:
IntStream is = ...
is.filter (! negative).
filter (prime).
filter (square).
filter (luckyNumber).
filter (...
以上是关于Java - 与If语句一起使用的布尔值的主要内容,如果未能解决你的问题,请参考以下文章