如何显示来自 void 方法的数组?
How can I display an array from a void method?
我是 java 的初学者,我正在尝试制作 Yahtzee 游戏,需要从 void 方法中将随机掷骰子作为数组。有人可以向我解释为什么这行不通吗?
import java.util.Arrays;
public class YatzeeGame {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] diceRolls = new int[5];
diceRolls = throwDice(diceRolls);
System.out.println(display(diceRolls));
}
public static void throwDice(int [] dice) {
int [] roll = {(int)(Math.random()*6+1),
(int)(Math.random()*6+1),(int)(Math.random()*6+1),
(int)(Math.random()*6+1),(int)(Math.random()*6+1),
(int)(Math.random()*6+1)};
dice = roll;
}
public static String display(int [] dice) {
String str = Arrays.toString(dice);
str = str.replace("[", "");
str = str.replace("]", "");
str = str.replace("," , " ");
return str;
}
为什么不起作用的解释:
您要做什么:将 dice(您传入的参数)更改为等于 roll。本质上,(如果我没记错的话)您正在尝试使用 throwDice 更改 diceRolls。
你实际上在做什么:你已经通过 diceRolls
并说 "here, let's call it dice"。然后,在你的函数结束时,你基本上说了 "dice doesn't mean diceRolls anymore. dice now means roll"。这意味着 diceRolls 仍然没有改变。
您需要更改 dice
的实际值,而不是更改骰子是什么。
例如:
public static void throwDice(int[] dice) {
// change the actual values of dice, instead of changing dice
dice[0] = (int) (Math.random() * 6 + 1);
dice[1] = (int) (Math.random() * 6 + 1);
dice[2] = (int) (Math.random() * 6 + 1);
dice[3] = (int) (Math.random() * 6 + 1);
dice[4] = (int) (Math.random() * 6 + 1);
}
您的代码中有不少错误。
在throwDice
方法中,dice
是一个局部变量,因此将其更改为roll
,这是另一个局部变量,不会影响该方法之外的任何东西。
您的 return 类型也是 void
,因此您无法使用该方法设置任何变量。
您可以使用 return 一个 int[]
:
的方法
public static int[] throwDice() {
int[] roll = new int[6];
for (int i = 0; i < 6; i++) {
roll[i] = (int) (Math.random() * 6) + 1;
}
return roll;
}
然后像这样使用它:
int[] diceRolls = throwDice();
他们想让你替换数组,如果你只是分配它就不会发生这种情况。请注意,返回数组仍然被认为是更好的方法。特别棘手:在您现有的代码中,您创建一个大小为 5 的数组,另一个大小为 6。由于您将其称为 zahtzee,我们将使用 5.
public static void throwDice(int [] dice) {
for (int x = 0; x < 5; x++)
dice[x] = (int)(Math.random()*6+1);
}
我是 java 的初学者,我正在尝试制作 Yahtzee 游戏,需要从 void 方法中将随机掷骰子作为数组。有人可以向我解释为什么这行不通吗?
import java.util.Arrays;
public class YatzeeGame {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] diceRolls = new int[5];
diceRolls = throwDice(diceRolls);
System.out.println(display(diceRolls));
}
public static void throwDice(int [] dice) {
int [] roll = {(int)(Math.random()*6+1),
(int)(Math.random()*6+1),(int)(Math.random()*6+1),
(int)(Math.random()*6+1),(int)(Math.random()*6+1),
(int)(Math.random()*6+1)};
dice = roll;
}
public static String display(int [] dice) {
String str = Arrays.toString(dice);
str = str.replace("[", "");
str = str.replace("]", "");
str = str.replace("," , " ");
return str;
}
为什么不起作用的解释:
您要做什么:将 dice(您传入的参数)更改为等于 roll。本质上,(如果我没记错的话)您正在尝试使用 throwDice 更改 diceRolls。
你实际上在做什么:你已经通过 diceRolls
并说 "here, let's call it dice"。然后,在你的函数结束时,你基本上说了 "dice doesn't mean diceRolls anymore. dice now means roll"。这意味着 diceRolls 仍然没有改变。
您需要更改 dice
的实际值,而不是更改骰子是什么。
例如:
public static void throwDice(int[] dice) {
// change the actual values of dice, instead of changing dice
dice[0] = (int) (Math.random() * 6 + 1);
dice[1] = (int) (Math.random() * 6 + 1);
dice[2] = (int) (Math.random() * 6 + 1);
dice[3] = (int) (Math.random() * 6 + 1);
dice[4] = (int) (Math.random() * 6 + 1);
}
您的代码中有不少错误。
在throwDice
方法中,dice
是一个局部变量,因此将其更改为roll
,这是另一个局部变量,不会影响该方法之外的任何东西。
您的 return 类型也是 void
,因此您无法使用该方法设置任何变量。
您可以使用 return 一个 int[]
:
public static int[] throwDice() {
int[] roll = new int[6];
for (int i = 0; i < 6; i++) {
roll[i] = (int) (Math.random() * 6) + 1;
}
return roll;
}
然后像这样使用它:
int[] diceRolls = throwDice();
他们想让你替换数组,如果你只是分配它就不会发生这种情况。请注意,返回数组仍然被认为是更好的方法。特别棘手:在您现有的代码中,您创建一个大小为 5 的数组,另一个大小为 6。由于您将其称为 zahtzee,我们将使用 5.
public static void throwDice(int [] dice) {
for (int x = 0; x < 5; x++)
dice[x] = (int)(Math.random()*6+1);
}