我有一个家庭作业,我需要制作一组灯泡对象。然后添加一个方法来“打开它们”。我需要一个嵌套的循环,让一个假想的人打开每个灯泡,然后每隔一个灯泡拉上灯串,然后每隔三个灯泡,依此类推,直到每20个灯泡。这是我的代码。它编译,但当我运行它,它只是永远。请帮助
public class LightBulb
{
public boolean isTurnedOn;
public LightBulb()
{
isTurnedOn = false;
}
public boolean isOn()
{
if(isTurnedOn==false)
return false;
return true;
}
public void pullString()
{
if(isTurnedOn==true){
isTurnedOn=false;
}
isTurnedOn=true;
}
}
public class LightDriver
{
public static void main(String[]arg)
{
int numOn=0;
LightBulb[]Bulb=new LightBulb[100];
for(int a=0;a<100;a++){
Bulb[a]=new LightBulb();
}
for(int b=0;b<=19;b++){
for(int c=0;c<=100;c=b+1){
Bulb[c].pullString();
}
}
for(int d=0;d<100;d++){
if(Bulb[d].isTurnedOn==true){
numOn++;
}
}
System.out.println(numOn+" lightbulbs are on");
}
}
答案 0 :(得分:2)
这导致了问题:
for(int b=0;b<=19;b++){
for(int c=0;c<=100;c=b+1){
Bulb[c].pullString();
}
}
对于内部for
循环的每次迭代,您设置c = b + 1
,这意味着c
没有变化,因为b
没有变化。
我认为你想要的是:
for(int b=1; b <= 20; b++){
for(int c=0; c < 100; c = c + b){
Bulb[c].pullString();
}
}
此外,无论最初是什么,你的pullString方法都将isTurnedOn设置为true。我想这就是你想要的:
public void pullString()
{
if (isTurnedOn)
{
isTurnedOn = false;
}
else
{
isTurnedOn = true;
}
}
答案 1 :(得分:1)
你的问题就在这个循环中
for(int b=0;b<=19;b++){
for(int c=0;c<=100;c=b+1){
Bulb[c].pullString();
}
}
你的c值永远不会增加,因为它始终设置为b+1
- 在b循环的单次迭代中 - 永远不会改变。因此,您永远不会达到循环的终止条件。这是一个修复
for(int b=0;b<=19;b++){
int c = b+1; //assign initial value outside of inner loop
for(;c<=100;c++){ //increment value inside of inner loop
Bulb[c].pullString();
}
}