2013-09-24 2 views
1

Я новичок в java/programming, и я подумал, что хороший способ научиться - это простая текстовая RPG-игра. Im на файле класса, где вы можете нанять работников, чтобы добывать руду для вас. В принципе, я беру 2000 золота у пользователя и рандомизировал число от 1 до 5 раз, и они получают руду на основе числа 10 раз. (например, 1 является медью, 4 является золотом)Looping in if statement

Это то, что у меня есть до сих пор, когда я запускаю его, он берет мое золото, но дает мне только 1 руду, когда он действительно должен дать мне 10, любую помощь? изменения: извините забыл упомянуть, я имел Int х = 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.

Просто добавьте int x = 0, прежде чем вы начнете do...while.

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 золото и т. Д., Как это возможно? также почему это дало 5 instad 10? – user2809361

+0

Рандомизатор может быть не идеальным, или система инвентаризации может не быть полной. Попытайтесь заменить учетных записей с помощью System.out.println(); для тестирования и посмотреть, что такое вывод. Поиграйте с ним, возможно, будут исправлены ошибки. – michaelwm

1

Причиной может быть то, что вы никогда не инициализируется х, так что это просто равна некоторой величине мусора. Попробуйте добавить int x = 0 перед циклом do-while.

Я также заметил, что вы звоните menu.start() после добавления руды в свой инвентарь, есть ли шанс, что ваша программа никогда не вернется в цикл?

Вам нужно будет использовать break, чтобы выскочить из инструкции switch после того, как он определил корпус, во-вторых, вы можете добавить default в конец коммутатора, который будет использоваться, если когда-либо будет время в этом случае 1 через случай 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