2016-03-15 152 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」(或類似的東西),並在進行「點擊」時調用該方法。

相關問題