簡體   English   中英

將 int 初始化與 boolean 運算符比較 if 語句參數

[英]Comparing an int initialization with a boolean operator for an if statement parameter

我已經聲明了 ints skyBday ,並寫下了這一行:

if (skyB == true || (day=1) != true) {
System.out.print("example text");  
}

我是否正確地假設代碼將在給定這些參數的情況下正確執行參數? 我特別不確定 (day="1") 是否會被正確檢測為錯誤,因為對象輸入確實是錯誤的。

最小可重現示例(不包括主要方法或包):

 int skyB = false;

 int day =2;

 if (skyB == true || (day =1) != true) {
System.out.print("example text");  }

簡單的答案:這不是 C++

您不能為 boolean 字段分配數值。 在 Java 中,只有兩個有效值是truefalse 因此,您不能將 integer 值分配給 boolean 變量。

為了使您的 boolean 表達式有效,您的變量skyBday必須是boolean數據類型

boolean skyB = false
boolean day = true

if (!skyB || day) {
  System.out.print("example text");
}

無需將boolean字段與 true 或 false 進行比較即可對其進行評估。 表達式!skyB (讀作“不是 skyB”)的計算結果為false 所以這相當於skyB == false 由於該部分的計算結果為真(skyB 等於假),表達式的第二部分將被跳過並調用System.out.print() 如果skyB的值更改為 true,則將評估變量day ,如果該變量的值等於 true(它是),則將執行 if 語句。

或者,您可以使用數值構建 boolean 個表達式。 如何? 簡單的。 任何數學表達式的計算都是一樣的。 例如:

int x = 5;
int y = 3;

if (x > y) {
  System.out.println("x is greater than y");
}

基本上......你試圖做的事情的邏輯(我理解它的方式)是正確的,但你的實施不是。 您不能混合使用 boolean 字段和數值。 Java 根本不允許。

現在,對於你的問題...

boolean skyB = false; // this must be boolean, not int
int day =2;       // this is fine

if (skyB || day == 1) {
  System.out.print("example text");
}

應該產生預期的結果。 用簡單的英語,上面的內容是:

如果 skyB 為假或為第一天,則打印“示例測試”

如果表達式的任何一部分未能計算為真(即如果 skyB 為真並且 day 變量是除 1 以外的任何值),它將不會打印任何內容。

更新

即使這個答案已被接受和投票,我還是想包含一些有關 boolean 表達式的信息,以幫助可能在這個概念上苦苦掙扎的新開發人員。

什么是 Boolean 表達式?

根據Oracle 文檔,“ Boolean 表達式是邏輯語句,要么為 TRUE 要么為 FALSE。 ”這些表達式采用幾個不同的 forms。例如,

  • Boolean 文字
if (true) {...}

雖然這樣的 if 語句沒有真正的原因,但上面是一個有效的表達式。 “如果為真,則執行花括號內的操作。” 這意味着里面的東西會一直執行(讓它和沒有“如果”一樣)。但是,這是理解rest的基礎。

  • Boolean 個變量
boolean isBlue = false;
if (isBlue) {...}

在上面的例子中,Boolean 表達式就是變量本身。 期望是,如果變量值的計算結果為true ,則將執行花括號內的內容。 由於該值為 false,因此不會執行。 上面的“如果”是更容易接受的縮寫形式

boolean isBlue = false;
if (isBlue == true) {...}

因此,由於此評估的左側(變量)值為 false 而右側為 true,因此完整表達式的評估結果為 false。 因此,花括號內的內容不會被執行(false 不等於 true)。 然而

boolean isBlue = false;
if(!isBlue == true){...}

否定 boolean 變量會切換它的值。 在這種情況下, isBlue變量的值為false “not”運算符將其值切換為true 由於true == true計算結果為 true(true 等於 true 是一個 true 表達式),因此執行大括號內的內容。

  • 產生 boolean 值的函數
public boolean isSkyBlue() {
  return true; // sorry for the over simplification
}
...
if (isSkyBlue()) {...}

這只不過是我已經展示的內容的高級形式。 在這種情況下,該方法“計算”要返回的 boolean 值。 由於 boolean 值是自身的表達式,因此在括號內插入方法調用(如上圖所示)是有效的。 只要 function 返回true ,花括號內的內容就會執行。

  • 比較操作

我已經包含了以下示例:

int x = 5;
int y = 3;

if (x > y) {
  System.out.println("x is greater than y");
}

任何類型的比較操作都會產生 true 或 false。 因此,這些比較操作是boolean個表達式。 這也包括覆蓋Object#equals(Object)方法的結果。 例如:

String s = "Hello";
if (s.equals("Hello")) {...}

作為旁注,應該使用覆蓋的equals()方法比較 Java 中的對象,而不是使用雙等號運算符(除非您只對比較 object 引用(地址)是否相等感興趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM