簡體   English   中英

Java - 與 If 語句一起使用的布爾值

[英]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" ,因為isNegativex更新后更新。

   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.

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