Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查对象数组以查看每个对象是否共享一个值,然后执行某些操作(Java)_Java_Arrays_Loops - Fatal编程技术网

检查对象数组以查看每个对象是否共享一个值,然后执行某些操作(Java)

检查对象数组以查看每个对象是否共享一个值,然后执行某些操作(Java),java,arrays,loops,Java,Arrays,Loops,我正在做一个基本的电梯模拟器。我有一个Building对象,它包含一个Person对象数组,其中每个Person对象都有一个名为travelComplete的布尔值,该值初始化为false,但在程序生命周期内更改为true class Building { private int floorNumber; public Lift[] lifts; public Person[] people; public void moveElevator() { }

我正在做一个基本的电梯模拟器。我有一个
Building
对象,它包含一个
Person
对象数组,其中每个
Person
对象都有一个名为
travelComplete
布尔值,该值初始化为
false
,但在程序生命周期内更改为
true

class Building {

    private int floorNumber;
    public Lift[] lifts;
    public Person[] people;

    public void moveElevator() { }

    public void loadPeople() { }

    public void unloadPeople() { }
}

class Person {
    private boolean travelComplete = false;
    private int currentFloor;
    private int destFloor;
}
我需要在主方法中有一个循环来运行电梯,直到
people
数组中每个对象的
travelComplete
变量为
true
。可能是这样的:

public static void main(String[] args) {
    while (each object in people[] != true) { // This obviously wouldn't
                                              // work but is the closest I
                                              // can get.
        object.loadPeople();
        object.moveElevator();
        object.unloadPeople();
    }
}
对不起,如果有类似的线程,我找不到它


提前感谢。

环视每个人,看看他们的行程是否完成,以决定是否继续操作电梯:

public static void main(String[] args) {
  boolean keepRunning = true;
  while (keepRunning) {
    object.loadPeople();
    object.moveElevator();
    object.unloadPeople();

    //this loop will run over each person
    //and set the flag to continue looping
    //if anyone has not finished their travel
    keepRunning = false;
    for (Person person : people) {
      if (!person.travelComplete) {
        keepRunning = true;
      }
    }
  }
}

在每个人身上绕一圈,看看他们的行程是否完成,以决定是否继续操作电梯:

public static void main(String[] args) {
  boolean keepRunning = true;
  while (keepRunning) {
    object.loadPeople();
    object.moveElevator();
    object.unloadPeople();

    //this loop will run over each person
    //and set the flag to continue looping
    //if anyone has not finished their travel
    keepRunning = false;
    for (Person person : people) {
      if (!person.travelComplete) {
        keepRunning = true;
      }
    }
  }
}

您可以通过在数组中进行流式处理并检查是否有任何条目与谓词匹配来实现这一点,如下所示:

while (Arrays.stream(people).anyMatch(
        person -> !person.travelComplete))
{
    object.loadPeople();
    object.moveElevator();
    object.unloadPeople();
}
anyMatch
将在谓词对任何数组项求值为true时返回true

下面是一个更一般的示例,因为您对
.loadPeople()
的操作不是很清楚:


您可以通过在数组中进行流式处理并检查是否有任何条目与谓词匹配来实现这一点,如下所示:

while (Arrays.stream(people).anyMatch(
        person -> !person.travelComplete))
{
    object.loadPeople();
    object.moveElevator();
    object.unloadPeople();
}
anyMatch
将在谓词对任何数组项求值为true时返回true

下面是一个更一般的示例,因为您对
.loadPeople()
的操作不是很清楚:


如果您有一个
布尔值的getter
,通过计算尚未完成旅行的人数,这应该可以很好地工作

while (Arrays.asList(people).stream().filter(p -> !p.travelComplete).count() > 0) {
    // Do your thing
}

如果您有一个
布尔值的getter
,通过计算尚未完成旅行的人数,这应该可以很好地工作

while (Arrays.asList(people).stream().filter(p -> !p.travelComplete).count() > 0) {
    // Do your thing
}

为了澄清,电梯将继续运行,直到检查返回100%的对象为
travelComplete==true
,此时模拟将结束。我假设模拟意味着打印控制台内容,如
将5人装载到电梯1中。1号电梯启动。一号电梯到了。从电梯1卸下5个人。
您能写出预期输出的样子吗?(顺便说一句,我认为英语中lift的意思是电梯)你在这里干什么还不太清楚。您的循环似乎在一个
Person
s数组上迭代,但您调用了当前数组项上的
Building
方法。为了澄清,电梯将继续运行,直到检查返回100%的对象为have
travelComplete==true
,我假设模拟意味着打印控制台上的东西,比如
把5个人装进电梯1。1号电梯启动。一号电梯到了。从电梯1卸下5个人。
您能写出预期输出的样子吗?(顺便说一句,我认为英语中lift的意思是电梯)你在这里干什么还不太清楚。你的循环似乎在一个
Person
s数组上迭代,但是你在当前数组项上调用了
Building
的方法。lupz-anwser看起来比mine更好。你需要删除两个分号,否则你的while循环没有效果!当然,谢谢你纠正了我的愚蠢错误,我的英语看起来比我的好。你需要删除这两个分号,否则你的while循环无效!当然,谢谢你纠正了我愚蠢的错误和我的英语^^