检查对象数组以查看每个对象是否共享一个值,然后执行某些操作(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%的对象为havetravelComplete==true
,我假设模拟意味着打印控制台上的东西,比如把5个人装进电梯1。1号电梯启动。一号电梯到了。从电梯1卸下5个人。
您能写出预期输出的样子吗?(顺便说一句,我认为英语中lift的意思是电梯)你在这里干什么还不太清楚。你的循环似乎在一个Person
s数组上迭代,但是你在当前数组项上调用了Building
的方法。lupz-anwser看起来比mine更好。你需要删除两个分号,否则你的while循环没有效果!当然,谢谢你纠正了我的愚蠢错误,我的英语看起来比我的好。你需要删除这两个分号,否则你的while循环无效!当然,谢谢你纠正了我愚蠢的错误和我的英语^^