2013-09-24 266 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