2016-03-15 149 views
-4

对不起,如果这是简单的问题,这是我的错,但我无法弄清自己的循环 - 它只能运行一次。目前,该环路一次构建所有20辆汽车,但我想每次点击只能制造一辆汽车。希望你能理解我。Java Loop不会像我想要的那样工作

我的循环代码:

for (int j = 3;j <= 80; j+=4){ 
    if(CarsLv1.cars[j] == 0){ 
     for(int i=1;i <= 25;i+=2){ 
      Part.parts[i] -=1; 
     } 
     //CarFrame.frames[1] -=1;        
     CarsLv1.cars[j] +=1; 

     switch(j){ 

      case 3:{ 
       JOptionPane.showMessageDialog (null, "You have gained Aston Martin DB9!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Aston_Martin_DB9Icon); 
       break;} 
      case 7:{ 
       JOptionPane.showMessageDialog (null, "You have gained Acura NSX!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Acura_NSXIcon); 
       break;} 
      case 11:{ 
       JOptionPane.showMessageDialog (null, "You have gained Ford Mustang!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Ford_MustangIcon); 
       break; 
      } 
      case 15:{ 
       JOptionPane.showMessageDialog (null, "You have gained Moskvich 412!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Moskvich_412Icon); 
       break; 
      } 
      case 19:{ 
       JOptionPane.showMessageDialog (null, "You have gained Kia Venga!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Kia_VengaIcon); 
       break; 
      } 
      case 23:{ 
       JOptionPane.showMessageDialog (null, "You have gained Fiat 1500!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Fiat_1500Icon); 
       break; 
      } 
      case 27:{ 
       JOptionPane.showMessageDialog (null, "You have gained Ferrari Enzo!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Ferrari_EnzoIcon); 
       break; 
      } 
      case 31:{ 
       JOptionPane.showMessageDialog (null, "You have gained Aston Martin Rapide!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Aston_Martin_RapideIcon); 
       break; 
      } 
      case 35:{ 
       JOptionPane.showMessageDialog (null, "You have gained Koenigsegg CCX!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Koenigsegg_CCXIcon); 
       break; 
      } 
      case 39:{ 
       JOptionPane.showMessageDialog (null, "You have gained Honda Civic!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Honda_CivicIcon); 
       break; 
      } 
      case 43:{ 
       JOptionPane.showMessageDialog (null, "You have gained Cadilliac ATS!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Cadilliac_ATSIcon); 
       break; 
      } 
      case 47:{ 
       JOptionPane.showMessageDialog (null, "You have gained Mitsubishi Lancer Evolution X!", "Congratulations", JOptionPane.INFORMATION_MESSAGE,ImagesHolder.Mitsubishi_LancerEvolutionXIcon); 
       break; 
      } 
      case 51:{ 
       JOptionPane.showMessageDialog (null, "You have gained Infiniti FX!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Infiniti_FXIcon); 
       break; 
      } 
      case 55:{ 
       JOptionPane.showMessageDialog (null, "You have gained Lancia Thema!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Lancia_ThemaIcon); 
       break; 
      } 
      case 59:{ 
       JOptionPane.showMessageDialog (null, "You have gained Volvo XC90!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Volvo_XC90Icon); 
       break; 
      } 
      case 63:{ 
       JOptionPane.showMessageDialog (null, "You have gained Acura CSX!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Acura_CSXIcon); 
       break; 
      } 
      case 67:{ 
       JOptionPane.showMessageDialog (null, "You have gained Saab Sonett II!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Saab_SonettIIIcon); 
       break; 
      } 
      case 71:{ 
       JOptionPane.showMessageDialog (null, "You have gained Renault Floride!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Renault_FlorideIcon); 
       break; 
      } 
      case 75:{ 
       JOptionPane.showMessageDialog (null, "You have gained BMW e34!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.BMW_e34Icon); 
       break; 
      } 
      case 79:{ 
       JOptionPane.showMessageDialog (null, "You have gained Chrysler Cordoba!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.Chrysler_CordobaIcon);         
       JOptionPane.showMessageDialog(null, "You have collected all LVL 1 cars", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.MaxUpgradeIcon); 
       break; 
      } 
      default:{ 
       JOptionPane.showMessageDialog(null, "You have collected all LVL 1 cars", "Congratulations", JOptionPane.INFORMATION_MESSAGE, ImagesHolder.MaxUpgradeIcon); 
       break; 
      } 
     } 
    } 
} 
+0

是的,循环不会像你想要的那样工作。使用class属性来记住状态。 – MikeCAT

+0

@crelix你想要做什么? – user3437460

+0

就我而言,这段代码根本没有获得外部输入。那么你期望在*这个循环中获得输入吗?我从3到80的步数是4,并增加相关的CarsLv1.cars [j]插槽(防止在较晚的时候动作,但j永远不会再有这个值)。 – rpy

回答

2

将打破你的switch后声明。 switch声明中的break s只是打破特定情况,它们不会退出周围的循环。

for (int j = 3;j <= 80; j+=4){ 
    if (CarsLv1.cars[j] == 0) { 
    switch(j){ 
     case 3: 
     // Whatever. 
     break; // This breaks the case. 
    } 
    break; // This breaks the loop; 
    } 
} 

注意,这将是一个更加简洁,如果你定义代表了汽车的枚举,是这样的:而不是通过这些数字迭代

enum Car { 
    ASTON_MARTIN_DB9(3, "Aston Martin DB9", ImagesHolder.Aston_Martin_DB9Icon), 
    ACURA_NSX(7, "Acura NSX", ImagesHolder.Acura_NSXIcon), 
    // etc, for other cars. 
    ; 

    private final int number; 
    private final String name; 
    private final ImageIcon icon; 

    private Car(int number, String name, ImageIcon icon) { 
    // Assign parameters to fields. 
    } 

    // Add getters. 
} 

然后,您可以遍历汽车本身:

boolean found = false; 
for (Car car : Car.values()) { 
    int j = car.getNumber(); 
    if(CarsLv1.cars[j] != 0) continue; 

    for(int i=1;i <= 25;i+=2){ 
    Part.parts[i] -=1; 
    }         
    CarsLv1.cars[j] +=1; 
    JOptionPane.showMessageDialog (null, "You have gained " + car.getName() + "!", "Congratulations", JOptionPane.INFORMATION_MESSAGE, car.getIcon()); 
    found = true; 
    break; 
} 
if (!found) { 
    // Show the message about having collected all cars. 
} 

ie即避免需要这个伟大的大开关,所有的重复鳕鱼即

2

循环一次构建所有20辆汽车,但我想每次点击只生成一辆汽车。

提示:如果你想让代码只执行一次,而不是连续多次执行。也许你不应该使用循环。

创建一个方法“createCar”(或类似的东西),并在进行“点击”时调用该方法。

相关问题