Java - 与If语句一起使用的布尔值

问题描述 投票:-1回答:3

我刚开始在学校学习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");

  }
java if-statement boolean
3个回答
0
投票

所以,在检查它是否为负数之前,你将x设置为-555。然后将布尔值isNegative设置为x是否小于0,此时它将为false。您稍后在程序中更新x,以便if语句不受影响。之所以说不,是因为它给出的是否定的,在整个程序中没有更新。请记住Java从上到下运行。

我注意到的一点是,打印出yes或no的代码在代码块中,如果它是负数则运行。你可能想解决这个问题。


0
投票

虽然整数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");

并且忽略了我的格式错误,这是我第一次回答;)


0
投票

在功能上,你可以声明一个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 (...
© www.soinside.com 2019 - 2024. All rights reserved.