根据java

时间:2016-02-26 23:18:43

标签: java

所以我在玫瑰游戏中构建花瓣,骰子定义为dice1,骰子2等。然后我运行一个循环来决定每个骰子的值是什么,并将其添加到游戏值。我想要的是循环的每个序列,以便它切换它正在查看的变量。所以先看看dice1。然后再看看dice2。

public class Rosegame
{
    private int dice1;
    private int dice2;
    private int dice3;
    private int dice4;
    private int dice5;
    private int gameValue;

    public void rollDice()
    {
       dice1 = (int) ((6-1+1) * Math.random()) + 1;
       dice2 = (int) ((6-1+1) * Math.random()) + 1;
       dice3 = (int) ((6-1+1) * Math.random()) + 1;
       dice4 = (int) ((6-1+1) * Math.random()) + 1;
       dice5 = (int) ((6-1+1) * Math.random()) + 1;

    }

    public void printValues()
    {
        System.out.println("Dice 1 is:" + dice1);
        System.out.println("Dice 2 is:" + dice2);
        System.out.println("Dice 3 is:" + dice3);
        System.out.println("Dice 4 is:" + dice4);
        System.out.println("Dice 5 is:" + dice5);

    }

    public int calculatePetalsOnRose()
    {
        gameValue = 0;
        for(int i = 1; i <=5; i++)
        {
            if (dice1 == 5)
            {
                gameValue = gameValue + 4;
            }
            else if (dice1 == 3)
            {
                gameValue = gameValue + 2;
            }
            else
            {
                gameValue = gameValue;
            }
        }
        return gameValue;
    }
}

这是我当前的代码,我需要的是if语句里面有dice1,我希望它能够在每次循环时改变。他们也是一个运行方法并允许输入但是到目前为止工作的驱动程序。非常感谢你提前

编辑:

将变量切换到我现在拥有的数组,这给了我一个错误,说java.lang.NullPointerException。它在调用rollDice函数时发生。

public class PetalsGame
{
    private int[] anArrayDice;
    private int gameValue;

    public void rollDice()
    {
       anArrayDice[0] = (int) ((6-1+1) * Math.random()) + 1;
       anArrayDice[1] = (int) ((6-1+1) * Math.random()) + 1;
       anArrayDice[2] = (int) ((6-1+1) * Math.random()) + 1;
       anArrayDice[3] = (int) ((6-1+1) * Math.random()) + 1;
       anArrayDice[4] = (int) ((6-1+1) * Math.random()) + 1;


    }

    public void printDice()
    {
        System.out.println("Dice 1 is:" + anArrayDice[0]);
        System.out.println("Dice 2 is:" + anArrayDice[1]);
        System.out.println("Dice 3 is:" + anArrayDice[2]);
        System.out.println("Dice 4 is:" + anArrayDice[3]);
        System.out.println("Dice 5 is:" + anArrayDice[4]);

    }

    public int calculateAllPetals()
    {
        gameValue = 0;
        for(int i = 0; i <=4; i++)
        {
            if (anArrayDice[i] == 5)
            {
                gameValue = gameValue + 4;
            }
            else if (anArrayDice[i] == 3)
            {
                gameValue = gameValue + 2;
            }
            else
            {
                gameValue = gameValue;
            }
        }
        return gameValue;
    }
}

我能够通过添加anArrayDice = new int [5]来修复它;在rollDice方法中。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

你似乎只掷一个骰子(至少这是你似乎唯一感兴趣的值),所以我首先要提取一个方法来掷骰子。出于可读性考虑,我还希望Random.nextInt(int)。像,

private static final Random rand = new Random();

private static int rollDie(int sides) {
    return rand.nextInt(sides) + 1;
}

然后,您可以根据需要使用该方法滚动和计算您的玫瑰。此外,您可以使用x += y;代替x = x + y;。像,

public int calculatePetalsOnRose() {
    int gameValue = 0;
    for (int i = 1; i <= 5; i++) {
        int dice = rollDie(6);
        System.out.printf("Dice %d is: %d%n", i, dice);
        if (dice == 5) {
            gameValue += 4;
        } else if (dice == 3) {
            gameValue += 2;
        }
    }
    return gameValue;
}

答案 1 :(得分:0)

我认为如果你使用数组存储你的骰子会更容易。此外,它还可以避免您不得不一遍又一遍地重复相同的代码行。

public int [] diceArray;
private int gameValue;

public void rollDice()
{
    for(int i =0; i < diceArray.length; i++)
    {
        diceArray[i] = 6 *((int)Math.random()+ 1);
    }

}

public void printValues()
{
    for(int i=0; i < diceArray.length; i++)
    {
        System.out.println("Dice" + (i+1) +"is:" + diceArray[i]);
    }
}

public int calculatePetalsOnRose()
{
    gameValue = 0;
    for(int i = 0; i < diceArray.length; i++)
    {
        if(diceArray[i] == 5)
        {
            gameValue += 4;
        }
        else if (diceArray[i] == 3)
        {
            gameValue +=2;
        }
    }

    return gameValue;
}