Java骰子游戏项目:将骰子的值返回给main方法

时间:2019-02-27 06:49:00

标签: java

我正在做一个骰子游戏项目。在游戏中,用户掷出四个骰子,并且这些骰子的值之和需要加在一起。 roll()方法用于执行此操作。编写roll方法的说明如下:

  

“理想情况下,roll()方法应该使用一个参数,说明您要掷骰子的数量。该方法应该是一个返回值的方法,该方法将骰子/骰子的值和总和返回给main()您可以一次掷出所有骰子,或一次掷出一个骰子。”

我决定一次掷四个骰子。在我的老师给我展示的示例骰子程序中,有许多方法返回值,而不仅仅是返回值。我的每个方法都返回一个值。但是,当我尝试编译它时,每次我有 return dieValue; 时,都会遇到一些错误,提示“找不到符号”;尽管我不确定为什么,因为我已经查看了此内容,并且在标头中添加了“ int”,并在程序的其他区域多次声明了变量,但仍然收到错误。我也尝试像老师建议的那样将其编译为较少的方法,但是当试图弄清楚如何说明要滚动多少个骰子时,我陷入了困境。因此,我坚持使用当前的方法,但是我仍然不确定出什么问题。

这是我的代码中处理此问题的部分:

        // Roll the dice (redirect to the roll() methods) and declare variables to hold the values that have returned. 
        int dieValue1 = roll_1();
        int dieValue2 = roll_2();
        int dieValue3 = roll_3();
        int dieValue4 = roll_4();

        // Declare a variable for the sum of the dice values (and add the dice values to get that sum).
        int diceSum = dieValue1 + dieValue2 + dieValue3 + dieValue4;

        // Print the sum of the rolled dice. 
        System.out.println("Your sum of the dice values: ");
        System.out.println(diceSum);

        // Determine if the user won or not. 
        if (diceSum == 6 ||diceSum == 12 ||diceSum == 13 ||diceSum == 17 || diceSum == 19 ||diceSum == 23)
            System.out.println("You win!");
            System.exit(0);

    }
    // roll() method header that rolls the die (creates a Die object and gets a random value for the object).
        public void roll()
        {
            // Create a Random class object. 
            Random dieRoll = new Random();

            // Get a random integer value for the dice between 1 and 6.
            int dieValue1 = dieRoll.nextInt(6) + 1;
            int dieValue2 = dieRoll.nextInt(6) + 1;
            int dieValue3 = dieRoll.nextInt(6) + 1;
            int dieValue4 = dieRoll.nextInt(6) + 1;
        }

    // method that returns the value of die1.
        public static roll_1()
        {
            return dieValue1;
        }
    // method that returns the value of die2.
        public static int roll_2()
        {
            return dieValue2;
        }
    // method that returns the value of die3.
        public int roll_3()
        {
            return static dieValue3;
        }
    // method that returns the value of die4.
        public static int roll_4()
        {
            return dieValue4;
        }
    // method that returns the sum of the values of die1, die2, die3, and die4. 
        public static int sum()
        {
            return dieValue1 + dieValue2 + dieValue3 + dieValue4;
        }
}

感谢任何决定提供帮助的人。

4 个答案:

答案 0 :(得分:0)

存在该问题是因为您在roll方法内部声明了dieValues,因此它们的作用域仅在此方法内部。然后返回不存在的dieValue。您需要将dieValue创建为类变量,并且在roll方法中使用“ this”关键字设置类变量,而不是“ int”类型。记住要声明它们为静态,因为您的“滚动”方法是静态的

contrib

这不是最佳解决方案,但我尝试以最少的更改运行您的程序。我建议不要使用静态,因为这里没有意义。

以下是我为您解决的问题的解决方案:

import java.util.Random;

public class Roll {
    static int dieValue1;
    static int dieValue2;
    static int dieValue3;
    static int dieValue4;

    public static void main(String[] args) {
        roll();
        int dieValue1 = roll_1();
        int dieValue2 = roll_2();
        int dieValue3 = roll_3();
        int dieValue4 = roll_4();

        // Declare a variable for the sum of the dice values (and add the dice values to
        // get that sum).
        int diceSum = dieValue1 + dieValue2 + dieValue3 + dieValue4;

        // Print the sum of the rolled dice.
        System.out.println("Your sum of the dice values: ");
        System.out.println(diceSum);

        // Determine if the user won or not.
        if (diceSum == 6 || diceSum == 12 || diceSum == 13 || diceSum == 17 || diceSum == 19 || diceSum == 23)
            System.out.println("You win!");
        System.exit(0);

    }

// roll() method header that rolls the die (creates a Die object and gets a random value for the object).
    public static void roll() {
        // Create a Random class object.
        Random dieRoll = new Random();

        // Get a random integer value for the dice between 1 and 6.
        dieValue1 = dieRoll.nextInt(6) + 1;
        dieValue2 = dieRoll.nextInt(6) + 1;
        dieValue3 = dieRoll.nextInt(6) + 1;
        dieValue4 = dieRoll.nextInt(6) + 1;
    }

// method that returns the value of die1.
    public static int roll_1()
    {
        return dieValue1;
    }

// method that returns the value of die2.
    public static int roll_2() {
        return dieValue2;
    }

// method that returns the value of die3.
    public static int roll_3()
    {
        return dieValue3;
    }

// method that returns the value of die4.
    public static int roll_4() {
        return dieValue4;
    }

// method that returns the sum of the values of die1, die2, die3, and die4. 
    public static int sum() {
        return dieValue1 + dieValue2 + dieValue3 + dieValue4;
    }
}

答案 1 :(得分:0)

这是行得通的。研究一下。理解。拜托。

package com.inlet.ifserver;

import java.util.Random;

public class DieRoller {

    private Random dieRoll;

    private int dieValue1;
    private int dieValue2;
    private int dieValue3;
    private int dieValue4;

    // roll() method header that rolls the die (creates a Die object and gets a random value for the object).
    public DieRoller()
    {
        Random dieRoll = new Random();
        dieRoll.setSeed(System.currentTimeMillis());
    }

    public void roll() {

        // Get a random integer value for the dice between 1 and 6.
        dieValue1 = dieRoll.nextInt(6) + 1;
        dieValue2 = dieRoll.nextInt(6) + 1;
        dieValue3 = dieRoll.nextInt(6) + 1;
        dieValue4 = dieRoll.nextInt(6) + 1;

    }
    // method that returns the value of die1.
    public int roll_1()
    {
        return dieValue1;
    }
    // method that returns the value of die2.
    public int roll_2()
    {
        return dieValue2;
    }
    // method that returns the value of die3.
    public int roll_3()
    {
        return dieValue3;
    }
    // method that returns the value of die4.
    public int roll_4()
    {
        return dieValue4;
    }
    // method that returns the sum of the values of die1, die2, die3, and die4.
    public int sum()
    {
        return dieValue1 + dieValue2 + dieValue3 + dieValue4;
    }

    public static void main (String [] args) {

        DieRoller roller = new DieRoller();
        roller.roll();

        // Roll the dice (redirect to the roll() methods) and declare variables to hold the values that have returned.
        int dieValue1 = roller.roll_1();
        int dieValue2 = roller.roll_2();
        int dieValue3 = roller.roll_3();
        int dieValue4 = roller.roll_4();

        // Declare a variable for the sum of the dice values (and add the dice values to get that sum).
        int diceSum = roller.sum();

        // Print the sum of the rolled dice.
        System.out.println("Your sum of the dice values: ");
        System.out.println(diceSum);

        // Determine if the user won or not.
        if (diceSum == 6 ||diceSum == 12 ||diceSum == 13 ||diceSum == 17 || diceSum == 19 ||diceSum == 23)
            System.out.println("You win!");
    }
}

您能告诉我这里发生的一切吗?也许您可以接受并使其通用。 N个骰子代替了4个骰子。除了单个骰子变量,您还可以拥有一个骰子值数组“ private int [] dieValues”。将骰子的数量作为参数传递给DieRoller的构造函数。

答案 2 :(得分:0)

roll()方法中,您定义了4个整数字段dieValue1dieValue2,依此类推。这些变量是在方法本身内声明的,因此无法在任何其他方法(例如roll_1()roll_2()等内)“读取”。

即使在其他方法中再次定义相同的变量时,它们也不共享任何内容,它们将被视为完全不同的变量。这就是为什么会出现“找不到符号”错误的原因,因为dieValue1中没有roll_1()可用,依此类推。

如果要将某些内容传递回调用诸如roll()之类的方法的代码,则必须使用return语句,例如:

public void roll() {
    // Create a Random class object. 
    Random dieRoll = new Random();

    // Get a random integer value for the dice between 1 and 6.
    return dieRoll.nextInt(6) + 1;
}

这也正是说明中所描述的:

  

该方法应为返回值的方法,该方法返回骰子/骰子的值

现在,练习的下一部分是告诉roll()方法您希望掷骰子多少次。为此,您必须按照说明中的说明传递参数:

  

理想情况下,roll()方法应使用一个参数来说明您要掷骰子的数量。

为此,您必须像这样更改方法:

public void roll(int times) {
    // Create a Random class object. 
    Random dieRoll = new Random();

    // Get a random integer value for the dice between 1 and 6.
    return dieRoll.nextInt(6) + 1;
}

这还意味着方法roll_1()roll_2()等都已过时,因为您将必须传递次数作为参数,而不必每次都声明一个新方法。您现在可以删除这些方法。

但是,仅凭这还不够,因为您仍然只在roll()方法中滚动一次骰子。为了解决这个问题,您可以使用一个循环结构,该结构重复执行相同的操作,直到达到某个阈值为止(在这种情况下,直到达到n次):

public void roll(int times) {
    // Create a Random class object. 
    Random dieRoll = new Random();

    int dieSum = 0;
    for (int time = 1; time <= times; time++) {
        // Get a random integer value for the dice between 1 and 6.
        int dieValue = dieRoll.nextInt(6) + 1;
        dieSum = dieSum + dieValue;
    }
    return dieSum;
}

在这种情况下,我们使用了for循环,声明了一个变量time,该变量将使每个值每轮增加一个,直到它不再小于或等于times。 / p>

这也意味着您不需要sum()方法,因为roll()方法现在已经为您计算了总和。您也可以删除此方法。

最后一部分是实际上在您的main()方法中调用该方法,如以下指示所示:

int diceSum = roll(4);
if (diceSum == 6 ||diceSum == 12 ||diceSum == 13 ||diceSum == 17 || diceSum == 19 ||diceSum == 23)
    System.out.println("You win!");
System.exit(0);

请注意,您在main()方法中的缩进有点令人困惑。如果您不使用大括号({})来包围if语句的主体,则仅执行一个操作。在这种情况下,该值为System.out.println("You win!")。无论System.exit(0)是什么,都将执行diceSum操作。

答案 3 :(得分:0)

我为您的应用建议以下方法。

package com.example.demo;

public class myclass {

    int sum = 0;

    public void play(int numberofdices, int numberofeyes) {
        for (int i = 1; i <= numberofdices; i++) {
            sum = sum + (int) ((Math.random()) * numberofeyes + 1);
        }

        // Print the sum of the rolled dice.
        System.out.println("Your sum of the dice values: ");
        System.out.println(sum);

        // Determine if the user won or not.
        if (sum == 6 || sum == 12 || sum == 13 || sum == 17 || sum == 19 || sum == 23) {
            System.out.println("You win!");
        } else {
            System.out.println("You loose!");
        }
    }

}