Java中是否允许使用多个&&语句?

Java中是否允许使用多个&&语句?,java,Java,Java中是否允许使用以下代码?我的程序无法运行,除非我注释掉这一行,并且我不确定if中是否允许使用多个&&语句 if(number.isBusy() && number2.isBusy() && number3.isBusy() && number4.isBusy() && number5.isBusy() ) {} 编辑以添加: 如果您注释掉上面给出的行,程序实际上会在输出窗口中显示一些内容,尽管添加到其中的唯一内容是数字5,

Java中是否允许使用以下代码?我的程序无法运行,除非我注释掉这一行,并且我不确定if中是否允许使用多个&&语句

if(number.isBusy() && number2.isBusy() && number3.isBusy() && number4.isBusy() && number5.isBusy() ) {}
编辑以添加: 如果您注释掉上面给出的行,程序实际上会在输出窗口中显示一些内容,尽管添加到其中的唯一内容是数字5,如果保留它,则所有输出都为零

这就是现在的整个计划:

// FILE: Line.java
// This program illustrates the use of the lineSimulate method which uses
// a simple queue to simulate cars waiting at a car wash.

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
// import edu.colorado.simulations.BooleanSource;
// import edu.colorado.simulations.Line ;
// import edu.colorado.simulations.Averager;

/******************************************************************************
* The <CODE>CarWash</CODE> Java application illustrates the use of
* the <CODE>lineSimulate</CODE> method.
* The illustration uses the following values:
*   <CODE>
*   <br>lineTime = 240
*   <br>arrivalTime = 0.0025
*   <br>totalTime = 6000
*   </CODE>
*
* <p><dt><b>Java Source Code for this class:</b><dd>
*   <A HREF="../applications/CarWash.java">
*   http://www.cs.colorado.edu/~main/applications/CarWash.java
*   </A>
*
* @author Michael Main 
*   <A HREF="mailto:main@colorado.edu"> (main@colorado.edu) </A>
*
* @version
*   Jun 12, 1998
******************************************************************************/
public class LineWait
{
   /**
   * The main method activates <CODE>lineSimulate</CODE> with the values:
   *   <CODE>
   *   <br>lineTime = 240
   *   <br>arrivalTime = 0.0025
   *   <br>totalTime = 6000
   *   </CODE>
   * <BR>The <CODE>String</CODE> argument (<CODE>args</CODE>) is not used in
   * this implementation.
   **/
   public static void main(String[ ] args)
   {

      final int LINETIME = 100 + (int)(Math.random() * ((400) + 1));
      final double ARRIVALPROB = (Math.random() * ((.1) + 1));
      final int TOTALTIME = 6000;

      lineSimulate(LINETIME, ARRIVALPROB, TOTALTIME);
   }

   /**
   * Simulate the running of a car washer for a specified amount of time.
   * @param <CODE>lineTime</CODE>
   *   the number of seconds required to wash one car
   * @param <CODE>arrivalProb</CODE>
   *   the probability of a customer arriving in any second, for example
   *   0.1 is 10%
   * @param <CODE>totalTime</CODE>
   *   the total number of seconds for the simulation
   * <dt><b>Precondition:</b><dd>
   *   <CODE>lineTime</CODE> and <CODE>totalTime</CODE> are positive;
   *   <CODE>arrivalProb</CODE> lies in the range 0 to 1.
   * <dt><b>Postcondition:</b><dd>
   *   The method has simulated a car wash where <CODE>lineTime</CODE> is the
   *   number of seconds needed to wash one car, <CODE>arrivalProb</CODE> is
   *   the probability of a customer arriving in any second, and
   *   <CODE>totalTime</CODE> is the total number of seconds for the
   *   simulation. Before the simulation, the method has written its three
   *   parameters to <CODE>System.out</CODE>. After the simulation, the method
   *   has written two pieces of information to <CODE>System.out</CODE>:
   *   (1) The number of cars washed, and (2) The average waiting time for
   *   customers that had their cars washed. (Customers that are still in the 
   *   queue are not included in this average).
   * @exception java.lang.IllegalArgumentException
   *   Indicates that one of the arguments violates the precondition.
   **/
   public static void lineSimulate
   (int lineTime, double arrivalProb, int totalTime)
   {  
      Queue<Integer> arrivalTimes = new LinkedList<Integer>( ); 
      Queue<Integer> arrivalTimes2 = new LinkedList<Integer>( );  
      Queue<Integer> arrivalTimes3 = new LinkedList<Integer>( );
      Queue<Integer> arrivalTimes4 = new LinkedList<Integer>( );
      Queue<Integer> arrivalTimes5 = new LinkedList<Integer>( );
      int next;
      BooleanSource arrival = new BooleanSource(arrivalProb);
      Line number = new Line(lineTime);
      Line number2 = new Line(lineTime);
      Line number3 = new Line(lineTime);
      Line number4 = new Line(lineTime);
      Line number5 = new Line(lineTime);
      Averager waitTimes = new Averager( );
      Averager waitTimes2 = new Averager();
      Averager waitTimes3 = new Averager();
      Averager waitTimes4 = new Averager();
      Averager waitTimes5 = new Averager();
      int currentSecond;
      // Write the parameters to System.out.
      System.out.println("Seconds to wait in line " + lineTime);
      System.out.print("Probability of customer arrival during a second: ");
      System.out.println(arrivalProb);
      System.out.println("Total simulation seconds: " + totalTime); 

      // Check the precondition:
      if (lineTime <= 0 || arrivalProb < 0 || arrivalProb > 1 || totalTime < 0)
         throw new IllegalArgumentException("Values out of range");        




      for (currentSecond = 0; currentSecond < totalTime; currentSecond++)
      {  // Simulate the passage of one second of time.

         // Check whether a new customer has arrived.
         if (arrival.query( ))
            {
                System.out.println("Test1");
                if(number.isBusy() && number2.isBusy() && number3.isBusy() && number4.isBusy() && number5.isBusy() )
                {
                   System.out.println("Test2");
                    if(arrivalTimes.size() < arrivalTimes2.size() && arrivalTimes.size() < arrivalTimes3.size() && arrivalTimes.size() < arrivalTimes4.size() && arrivalTimes.size() < arrivalTimes5.size()) 
                    {
                        arrivalTimes.add(currentSecond);
                        System.out.println("Test");
                    }
                    else if(arrivalTimes2.size() < arrivalTimes.size() && arrivalTimes2.size() < arrivalTimes3.size() && arrivalTimes2.size() < arrivalTimes4.size() && arrivalTimes2.size() < arrivalTimes5.size())
                    {
                        arrivalTimes2.add(currentSecond);
                        System.out.println("Test");
                    }
                    else if(arrivalTimes3.size() < arrivalTimes.size() && arrivalTimes3.size() < arrivalTimes2.size() && arrivalTimes3.size() < arrivalTimes4.size() && arrivalTimes3.size() < arrivalTimes5.size())
                    {
                        arrivalTimes3.add(currentSecond);
                        System.out.println("Test");
                    }
                    else if(arrivalTimes4.size() < arrivalTimes.size() && arrivalTimes4.size() < arrivalTimes3.size() && arrivalTimes4.size() < arrivalTimes2.size() && arrivalTimes4.size() < arrivalTimes5.size())
                    {
                        arrivalTimes4.add(currentSecond);
                        System.out.println("Test");
                    }
                    else{arrivalTimes5.add(currentSecond);}
                }

            }

             // Check whether we can put the person into a line.
             if ((!number.isBusy( ))  &&  (!arrivalTimes.isEmpty( )))
             {
                next = arrivalTimes.remove( );
                waitTimes.addNumber(currentSecond - next);
                number.startMoving( );
             }
             if ((!number2.isBusy( ))  &&  (!arrivalTimes2.isEmpty( )))
             {
                next = arrivalTimes2.remove( );
                waitTimes2.addNumber(currentSecond - next);
                number2.startMoving( );
             }
             if ((!number3.isBusy( ))  &&  (!arrivalTimes3.isEmpty( )))
             {
                next = arrivalTimes3.remove( );
                waitTimes3.addNumber(currentSecond - next);
                number3.startMoving( );
             }
             if ((!number4.isBusy( ))  &&  (!arrivalTimes4.isEmpty( )))
             {
                next = arrivalTimes4.remove( );
                waitTimes4.addNumber(currentSecond - next);
                number4.startMoving( );
             }
             if ((!number5.isBusy( ))  &&  (!arrivalTimes5.isEmpty( )))
             {
                next = arrivalTimes5.remove( );
                waitTimes5.addNumber(currentSecond - next);
                number5.startMoving( );
             }


         // Subtract one second from the remaining time in the current li
         number.reduceRemainingTime( );
         number2.reduceRemainingTime( );
         number3.reduceRemainingTime( );
         number4.reduceRemainingTime( );
         number5.reduceRemainingTime( );
        }   




      // Write the summary information about the simulation.
      System.out.println("\nCustomers served Line1: " + waitTimes.howManyNumbers( )); 
      if (waitTimes.howManyNumbers( ) > 0)
         System.out.println("Average wait Line1: " + waitTimes.average( ) + " sec");
         System.out.println("\nCustomers served Line2: " + waitTimes2.howManyNumbers( )); 
      if (waitTimes.howManyNumbers( ) > 0)
         System.out.println("Average wait Line2: " + waitTimes2.average( ) + " sec");
       System.out.println("\nCustomers served Line3: " + waitTimes3.howManyNumbers( )); 
      if (waitTimes.howManyNumbers( ) > 0)
         System.out.println("Average wait Line3: " + waitTimes3.average( ) + " sec");
       System.out.println("\nCustomers served Line4: " + waitTimes4.howManyNumbers( )); 
      if (waitTimes.howManyNumbers( ) > 0)
         System.out.println("Average wait Line4: " + waitTimes4.average( ) + " sec");
          System.out.println("\nCustomers served Line5: " + waitTimes5.howManyNumbers( )); 
      if (waitTimes.howManyNumbers( ) > 0)
         System.out.println("Average wait Line5: " + waitTimes5.average( ) + " sec");

} 
}

是的,可以将无限多个逻辑运算符链接在一起。

是的,可以将无限多个逻辑运算符链接在一起。

该表达式是完全合法的语法。&&运算符是一个短路逻辑AND:求值从左向右进行,如果求值为false,将在第一个术语处停止

编辑

根据您的编辑,我猜问题在于,只有当所有数字。,5号电话很忙。这只是一个猜测,因为您没有发布Line类的外观或您希望看到的行为


作为旁注,我认为如果您定义了一个封装队列、行和平均器的类,那么您的程序将更具可读性和可维护性。大概这三个对象合在一起构成了对您的问题域有意义的东西。然后,您可以声明一个数组,或者更好的是,声明这些对象的列表,并使用它们,而不是将它们作为独立变量使用。

该表达式是完全合法的语法。&&运算符是一个短路逻辑AND:求值从左向右进行,如果求值为false,将在第一个术语处停止

编辑

根据您的编辑,我猜问题在于,只有当所有数字。,5号电话很忙。这只是一个猜测,因为您没有发布Line类的外观或您希望看到的行为


作为旁注,我认为如果您定义了一个封装队列、行和平均器的类,那么您的程序将更具可读性和可维护性。大概这三个对象合在一起构成了对您的问题域有意义的东西。然后,您可以声明一个数组,或者更好的是,声明这些对象的列表,并使用它们,而不是将它们作为独立变量使用。

是的,这是允许的。&&是shortcircuit操作符,因此一旦其中一个谓词失败,就不会进行进一步的计算。如果您希望计算所有条件,则可以使用&即只计算一个符号和所有谓词。希望这样做的主要原因是谓词是否有您希望发生的副作用。这通常是不好的做法,但在你的情况下,这似乎是你想要的

if (number.isBusy() &
    number2.isBusy() &
    number3.isBusy() &
    number4.isBusy() & 
    number5.isBusy()) {
}
每个isBusy都将执行,结果将是返回值的and

if (number.isBusy() &&
    number2.isBusy() &&
    number3.isBusy() &&
    number4.isBusy() &&
    number5.isBusy()) {
}

每个isBusy都将执行,直到其中一个出现故障,以下isBusy将不会被调用。

是的,这是允许的。&&是shortcircuit操作符,因此一旦其中一个谓词失败,就不会进行进一步的计算。如果您希望计算所有条件,则可以使用&即只计算一个符号和所有谓词。希望这样做的主要原因是谓词是否有您希望发生的副作用。这通常是不好的做法,但在你的情况下,这似乎是你想要的

if (number.isBusy() &
    number2.isBusy() &
    number3.isBusy() &
    number4.isBusy() & 
    number5.isBusy()) {
}
每个isBusy都将执行,结果将是返回值的and

if (number.isBusy() &&
    number2.isBusy() &&
    number3.isBusy() &&
    number4.isBusy() &&
    number5.isBusy()) {
}

每个isBusy都将执行,直到其中一个失败,以下isBusy将不会被调用。

用户1247751应提供更多信息以获得更好的答案


但是,根据提供的信息,我可以推测其中一种isBusy方法会改变系统的状态,使其无法工作。

用户1247751应该提供更多信息,以获得更好的答案


但是,根据提供的信息,我可以推测其中一种isBusy方法会更改系统的状态,使其无法工作。

这是允许的。你能扩展到不起作用吗?定义“不起作用”。您可能已经确定它是编译的,但这也意味着它是合法的Java。问题已经用完整的程序更新了。这不是完整的程序。我寻找isBusy方法。看起来isBusy是Line类的一个方法,应该在Line.java文件中定义,但不是。这是允许的。你能扩展到不起作用吗?定义“不起作用”。您可能已经确定它是编译的,但这也意味着它是合法的Java。问题已经用完整的程序更新了。这不是完整的程序。我寻找isBusy方法。看起来isBusy是Line类的一个方法,应该在Line.java文件中定义,但不是。