2013-09-24 70 views
1

我是java /編程新手,我認爲一個很好的學習方法就是製作一個簡單的文本RPG遊戲。 我在一個班級檔案裏,你可以僱傭工人爲你開採礦石。基本上,我從用戶那裏獲得2000金,隨機抽取一個數字1-5到10次,他們根據這個數字得到10次礦石。 (例如,1銅,4金)循環if語句

這是我到目前爲止,當我運行它,它把我的金牌,但只給了我1噸礦石當它真正應該給我10,任何幫助嗎? 編輯:對不起,忘了提,我不得不INT X = 0;在頂部

if ((input.input.equalsIgnoreCase("a")) && inventory.goldCoins >= 2000) { 
    System.out.println("You have hired Sanchez for $2000!"); 
    inventory.goldCoins -= 2000; 

    do { 
     int workerOre = (int)(Math.random() * 5 + 1); 
     if (workerOre == 1) { 
      inventory.addInventory("Copper Ore"); 
      menu.start(); 
     } else if (workerOre == 2) { 
      inventory.addInventory("Iron Ore"); 
      menu.start(); 
     } else if (workerOre == 3) { 
      inventory.addInventory("Steel Ore"); 
      menu.start(); 
     } else if (workerOre == 4) { 
      inventory.addInventory("Gold Ore"); 
      menu.start(); 
     } else if (workerOre == 5) { 
      inventory.addInventory("Copper Ore"); 
     } 
     x++; 
    } while (x < 10); 
    System.out.println("Sanchez has finished his shift and the ore has been added to your inventory!"); 
} else if ((input.input.equalsIgnoreCase("a")) && inventory.goldCoins < 2000) { 
    System.out.println("You do not have enough money!"); 
    worker(); 
} 

回答

0

看起來你永遠不會初始化x

只需在開始do...while之前添加int x = 0即可。

0

嘗試類似:

for (int i = 0; i < 10; i++) { 
    mineOre(); 
} 

public void mineOre() { 
    int ore = (int) Math.random() * 5 + 1; 
    switch (ore) { 
     case 1: inventory.addInventory("Copper Ore"); 
     case 2: inventory.addInventory("Iron Ore"); 
     case 3: inventory.addInventory("Steel Ore"); 
     case 4: inventory.addInventory("Gold Ore"); 
     case 5: inventory.addInventory("Copper Ore"); 
    } 
    menu.start(); 
} 
+1

嘿,這工作,但它給了我的情況下確切的礦石5。我希望它是隨機的,所以也許像3銅1鋼1黃金等,這是怎麼回事?爲什麼它給10個5個星期? – user2809361

+0

隨機工具可能不完美,或者您的庫存添加系統系統可能不完整。嘗試用System.out.println();替換庫存加法器進行測試,並查看輸出結果。玩弄它,可能會有一些錯誤修復。 – michaelwm

1

的原因可能是你從來沒有初始化的x,所以它只是等於一些垃圾值。嘗試在do-while循環之前添加int x = 0

我還注意到,在將礦石添加到您的清單後,您打電話給menu.start(),您的程序是否有機會再次進入循環?

您將需要使用break在識別出該情況後跳出switch語句,其次,您可以將default添加到交換機的末端,如果該情況存在一段時間,將使用該末尾通過案例4不滿意。例如:

switch(ore) 
{ 
    case 1: inventory.addInventory("Copper Ore"); 
     break; 
    case 2: inventory.addInventory("Iron Ore"); 
     break; 
    case 3: inventory.addInventory("Steel Ore"); 
     break; 
    case 4: inventory.addInventory("Gold Ore"); 
     break; 
    default: inventory.addInventory("Copper Ore"); 
} 
+0

對不起,忘了提及我有int x = 0;在頂部 – user2809361