2017-07-03 49 views
0

我对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

我建议你使用另一个for循环类似于你已经有的循环。 –

+2

我还建议您了解Java命名约定。类通常以大写字母开头,变量名以小写字母开头。接下来使用更多的描述性名称。例如'D6'应该是'diceCount'。 –

+0

如果D6是对D&D的引用,它可能比'diceCount'更具描述性,但这是非常情景化和基于上下文的。将它用作扫描仪输入的变量名称表明这可能不是这种情况。 – SaxyPandaBear

回答

1

我们假设你运行了这个函数,现在有一个值列表[1,3,5,2,4],并且你想象你所描述的那样显示它们。

在你的主要方法中,你有这个列表,所以你可以做一些循环和字符串格式化来获得你想要的输出。 (编辑以用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,您传递的是list.get(i),其中是给定索引处列表中的值。这应该很好地对应于卷的顺序。

这不一定要用字符串格式来完成。我发现个人阅读往往会更好,更容易,但它很容易被字符串连接代替。

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

IMO对我来说似乎是斜坡,需要记住留下空格,或者省略连接部分之间的空格可能会令人讨厌。

+1

请注意'Dice'是一个带'Roller'类型的参考变量。 'roll()'方法在OP中显示的代码中。 –

+0

男人,当人们大写他们的变量名时,我从来没有注意到发生了什么事。我和我微弱的眼睛。 – SaxyPandaBear

+1

接下来,我建议使用'printf()'而不是'println(String.format())'。更少打字。 –