2017-07-03 60 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())'。更少打字。 –