显示多骰子滚轮的特定输出

时间:2017-07-03 23:40:27

标签: java dice

我是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滚动#“

等。我迷失了如何做到这一点,尤其是骰子的数量不同。非常感谢任何帮助。

1 个答案:

答案 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看起来很邋,,需要记住留空间,或者在连接部分之间省略空格可能很烦人。