2017-07-03 1 views
0

Je suis très nouveau à java et je me suis fixé comme objectif de faire un programme de dés (en restant petit). Le but final est d'être capable de lancer un nombre de dés choisis par l'utilisateur et de pouvoir avoir un nombre différent de flancs au besoin et je reçois le nombre de dés et le nombre de faces de chacun. Voici le code que j'ai fait pour lui (peut-être vraiment mauvais, désolé si elle est):affichage d'une certaine sortie pour un rouleau multi-dés

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

Maintenant, je suis au point où je veux afficher la ArrayList mais je veux afficher comme

« dés 1 roulé #

dés 2 # roulées »

etc. et je suis perdu sur la façon de le faire surtout avec le nombre variable de dés. Toute aide est très appréciée.

+0

Je suggère que vous utilisiez une autre boucle similaire à celle que vous avez déjà. –

+2

Je suggère également que vous en apprendre davantage sur les conventions de nommage Java. Les classes commencent généralement par une lettre majuscule et des noms de variable avec une lettre minuscule. Ensuite, utilisez des noms plus descriptifs. Par exemple, 'D6', devrait être quelque chose comme' diceCount'. –

+0

Si D6 est une référence à D & D, il pourrait être beaucoup plus descriptif que 'diceCount', mais c'est très contextuel et basé sur la situation. L'utiliser comme nom de variable pour une entrée de scanner indique que ce n'est probablement pas le cas. – SaxyPandaBear

Répondre

1

Supposons que vous ayez exécuté ceci et que vous ayez maintenant une liste de valeurs, [1, 3, 5, 2, 4] et que vous souhaitiez les afficher comme décrit.

Dans votre méthode principale, vous avez la liste, vous pouvez donc faire une mise en boucle et un formatage de chaîne pour obtenir la sortie désirée. (Sous la direction d'utiliser printf() plutôt que 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)); 
} 

Notez que les énoncés ci-dessous sont toujours valables et peuvent encore être appliquées à printf (...)

Pour marcher à travers elle, la mise en forme de chaîne est juste une façon élégante de formater vos chaînes (drôle comment cela fonctionne). Le premier %d correspond à la première valeur donnée à format(), qui est i+1. Il est i+1 par opposition à i car sinon, vous verriez "Dice # 0 roulé ..." d'abord, puisque vous commencez à indexer les tableaux et les listes à 0. Avec le second %d dans l'appel format(), vous passez en list.get(i) est la valeur dans la liste à l'index donné. Cela devrait correspondre bien à l'ordre des rouleaux.

Cela n'a pas dû être fait avec la mise en forme de chaîne. Je trouve qu'il a tendance à être meilleur et plus facile à lire personnellement, mais il est facilement substitué par la concaténation de chaînes.

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

Il me semble sloppier à l'OMI, et qui ont besoin de se rappeler de laisser des espaces, ou d'omettre les espaces entre les parties concaténées peut être gênant.

+1

Notez que 'Dice' est une variable de référence avec le type' Roller'. La méthode 'roll()' est dans le code affiché dans l'OP. –

+0

L'homme, quand les gens capitalisent leurs noms de variables, je ne remarque jamais ce qui se passe. Moi et mes faibles yeux. – SaxyPandaBear

+1

Ensuite, je suggère d'utiliser 'printf()' au lieu de 'println (String.format())'. Beaucoup moins de frappe. –