函数在for循环中不是随机化的

时间:2013-09-24 15:31:33

标签: java

我有这个函数在for循环中运行10次,它应该随机化并给出随机矿石,但是现在脚本给出10个铜矿石

    public void mineOre() {

        int ore = (int) Math.random() * 10 + 1;

        if(ore ==1) {                       
            inventory.addInventory("Copper Ore");
        } else if(ore ==2) {                        
            inventory.addInventory("Iron Ore");
        } else if(ore ==3) {                        
            inventory.addInventory("Steel Ore");
        }else if(ore ==4) {                     
            inventory.addInventory("Gold Ore");
        }else if(ore ==5) {                     
            inventory.addInventory("Iron Ore");
        } else if(ore > 6) {                        

        }
    }

我在这个

上运行了该功能
            for (int i = 0; i < 10; i++) {
                mineOre();
            }

如何修复mineOre以便随机化?现在感觉math.random()运行一次,然后它使用该数字10次

我也试过

            for (int i = 0; i < 10; i++) {
                int ore = (int) Math.random() * 10 + 1;
                if(ore ==1) {                       
                    inventory.addInventory("Copper Ore");
                } else if(ore ==2) {                        
                    inventory.addInventory("Iron Ore");
                } else if(ore ==3) {                        
                    inventory.addInventory("Steel Ore");
                }else if(ore ==4) {                     
                    inventory.addInventory("Gold Ore");
                }else if(ore ==5) {                     
                    inventory.addInventory("Iron Ore");
                } else if(ore > 6) {                        

                }
            }

它仍然提供10个铜矿石

1 个答案:

答案 0 :(得分:5)

使用:

    int ore = (int) (Math.random() * 10 + 1);

对int的强制转换比乘法更紧密。

使用java.util.Random类中的nextInt方法会更好:它更有效并保证统一分布。乘法铸造方法可能略有偏差。

private Random myRandom = new Random();
public void mineOre() {

    int ore = myRandom.nextInt(10)+1

    if(ore ==1) {                       
    ....
}