我正在做一个骰子游戏项目。在游戏中,用户掷出四个骰子,并且这些骰子的值之和需要加在一起。 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;
}
}
感谢任何决定提供帮助的人。
答案 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个整数字段dieValue1
,dieValue2
,依此类推。这些变量是在方法本身内声明的,因此无法在任何其他方法(例如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!");
}
}
}