[英]Java - Boolean used with If statement
我剛開始在學校學習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");
}
因此,在檢查它是否為-555
之前,將x
設置為-555
。 然后將布爾值isNegative
設置為 x 是否小於 0,此時它將為 false。 稍后在程序中更新 x,以便 if 語句不受影響。 之所以說不,是因為它給出的是否定的,在整個程序中都沒有更新。 請記住,Java 從上到下運行。
我還注意到,打印出是或否的代碼在運行的代碼塊中,如果它是負數。 你可能想解決這個問題。
雖然更新了整數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)
在編程中,謂詞通常是一個方法/函數,它為某些輸入返回一個布爾值。 輸入在這里是一個整數,對於基本類型,有一個像 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 (...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.