我是java的新手,我为自己设定了一个目标,即制作一个骰子滚动程序(保持它很小)。最终目标是能够滚动用户选择的骰子数量,并且如果需要的话,每个骰子都有不同数量的骰子,我可以得到骰子的数量和每个骰子的数量。这是我为它制作的代码(可能真的很糟糕,如果是的话,对不起):
public class Roller {
public final Random rando;
public final int faces;
public Roller(int faces) {
this.rando = new Random();
this.faces = faces;
}
public int roll() {
return 1 + rando.nextInt(faces);
}
//above code is not mine I built off what my friend wrote cause i didnt know if i still need it
public static void main(String[] args) {
Random rand = new Random();
Scanner scan = new Scanner(System.in);
System.out.print("How many dice do you want to roll?\n");
int D6 = scan.nextInt();
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < D6; i++) {
System.out.print("How many sides does die " + (i + 1) + " have?\n");
Roller dice = new Roller(scan.nextInt());
list.add(dice.roll());
}
}
}
现在我想要显示ArrayList
,但我希望将其显示为
“骰子1滚动#
骰子2滚动#“
等。我迷失了如何做到这一点,尤其是骰子的数量不同。非常感谢任何帮助。
答案 0 :(得分:1)
我们假设你运行了这个,现在有了一个值列表,[1,3,5,2,4],你想按照你的描述显示它们。
在main方法中,您有列表,因此您可以执行一些循环和字符串格式化以获得所需的输出。 (编辑为使用printf()而不是String.format())
// in main...
// after list has all it's values
for (int i = 0; i < list.size(); i++) {
System.out.printf("Dice #%d rolled %d", i+1, list.get(i));
}
请注意,以下语句仍然有效,仍可应用于printf(...)
要完成它,字符串格式化只是格式化字符串的一种奇特方式(有趣的是如何工作)。第一个
%d
对应于format()的第一个值,即i+1
。它是i+1
而不是普通i
,因为否则你会首先看到“Dice#0滚动...”,因为你开始将数组和列表编入索引为0.使用第二个%d
在format()调用中,传入list.get(i)
,这是给定索引的列表中的值。这应该与卷的顺序很好地对应。
不必使用String格式化。我发现它可以更好,更容易阅读,但很容易用字符串连接代替。
//replace the print statement with this if you want
System.out.println("Dice #" + (i+1) + " rolled " + list.get(i));
对我来说IMO看起来很邋,,需要记住留空间,或者在连接部分之间省略空格可能很烦人。