提问者:小点点

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


我对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());
       }
   }
}

现在我想显示< code>ArrayList,但我想将其显示为

"骰子1掷出#

掷骰子2 # "

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


共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,因为否则你会看到“骰子#0掷出......”首先,由于您从 0 开始索引数组和列表。使用 format() 调用中的第二个 %d,您可以传入 list.get(i),这是给定索引处列表中的值。这应该与卷的顺序很好地对应。

这不必使用字符串格式来完成。我发现它往往更好,更容易个人阅读,但它很容易被字符串串联所取代。

//replace the print statement with this if you want
System.out.println("Dice #" + (i+1) + " rolled " + list.get(i));

对我来说,IMO似乎更草率,需要记住留下空格,或者省略串联部分之间的空格可能会很烦人。