2013-04-15 6 views
0

Ok, donc, je suis très nouveau à Java.
Je suis en train de concevoir un calculateur de score, pour un projet que j'ai longtemps laissé de côté. Cependant, j'aimerais savoir comment le faire, pour ma propre connaissance.Score calculatrice

Le programme est supposé demander un jet de dé, et l'ajouter aux jets précédents, pour chaque joueur.
J'ai supposé qu'une boucle while accomplirait cela, mais à chaque fois qu'elle traverse la boucle, elle remet la variable à l'état actuel. En tant que tel, je ne peux pas obtenir un total ...

est Ci-dessous un code:

static int players; 
    static String p1; 
    static String p2; 
    static String p3; 
    static String p4; 
    static int maxScore; 
    static int roll1; 
    static int roll2; 
    static int roll3; 
    static int roll4; 
    static int total1; 
    static int total2; 
    static int total3; 
    static int total4; 
    public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Enter number of players: "); 
    players=keyboard.nextInt(); 
    System.out.print("Enter Maximum Score: "); 
    maxScore=keyboard.nextInt(); 
    if(players==2){     //will add more ifs when i get the code right 
     System.out.println("Please enter players names."); 
     System.out.print("Player 1: "); 
     p1=keyboard.next(); 
     System.out.print("Player 2: "); 
     p2=keyboard.next(); 
     System.out.println(p1 + "\t \t " + p2 + "\n" 
     + "_______ \t _______ \n"); //displays scorecard look with players names 

     { 


     while (total1 < maxScore && total2<maxScore) { 
     //scorecard quits when maxScore is reached by either player 
     int roll; 
     total1=(roll+roll1); 

     System.out.print(""); 
     roll=keyboard.nextInt(); //asks for current roll 

     System.out.print("\n"+"_____"+"\n"); 
     System.out.print(roll+"+"+"\n"+roll1+"\n"+"_____"+"\n"+(roll+roll1)+"\n"); 
     /*i want this to display total score + last roll and then 
     *total it again on the next line*/ 
     roll1=roll; 
     } 
+1

On dirait que vous affectez 'roll1' à' roll' au lieu d'ajouter sa valeur. Vous pouvez essayer: 'roll1 + = roll;' – jcern

+1

quoi avec l'accolade d'ouverture avant la boucle while? Quelle variable est censée contenir le total? est-ce total1? si c'est le cas, il suffit de charger le rouleau dans roll1 puis de faire le total + = roll1 (+ = signifie total = total + roll) – Ben313

Répondre

1

Quelques conseils pour vos progrès de programmation en Java:

  1. La roll variables ne sert à rien. roll1, et ainsi de suite, va stocker le dernier lancer pour chaque joueur.

  2. Initialisez vos variables, si possible. S'appuyer sur les valeurs par défaut devrait être évité, car il peut vous apporter des problèmes à mesure que vous apprenez (NullPointerException vous rendra visite un jour).

  3. Dans votre boucle, vous aviez total1=(roll+roll1);. C'est faux. Vos variables, total1, roll, roll1 ne sont pas initialisées au moment où le programme atteint ce point. Comme ils sont des entiers, ils sont initialisés (en silence) à 0, donc total1 donne 0 à ce stade, ce qui ne fait pas grand-chose. Après cela, vous continuez à récupérer le rouleau. Essayez l'inverse, d'abord le rouleau, puis l'addition. Vous avez mentionné que vous êtes nouveau sur Java, mais que vous pourriez envisager d'implémenter ce même programme avec des tableaux dans un futur plus lointain. Vous remarquerez que cela vous évite beaucoup de répéter le code que vous avez écrit maintenant.

En résumé, et traduire les directives de code (pour 2 joueurs):

public class MyScoreCalculator { 
    static String p1 = ""; 
    static String p2 = ""; 
    static int maxScore = 0; 
    static int roll1 = 0; 
    static int roll2 = 0; 
    static int total1 = 0; 
    static int total2 = 0; 

    public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 
     // Dialogue to get data... 
     // Display scorecard look with players names 

     while (total1 < maxScore && total2 < maxScore) { 
      //scorecard quits when maxScore is reached by either player 
      roll1 = keyboard.nextInt(); // ask for current roll 

      System.out.println(total1 + "+"); 
      System.out.println(roll1); 
      System.out.println("_____"); 
      System.out.println(roll1 + total1); 

      total1 = total1 + roll1; 

      // Do the same for next player. 
     } 
    } 
} 
+0

Merci. J'ai finalement réalisé que j'ai défini le total trop tôt dans la boucle. Et je sais que j'ai beaucoup à apprendre. C'est mon premier langage de programmation et je n'y suis allé que depuis une semaine. Merci pour l'aide si – derek

+0

@derek Lent et régulier, c'est comme ça que tout le monde va en apprenant la programmation. Il n'y a rien de mal à ça. Ce 4ème indice que je vous ai signalé apparaîtra sûrement tôt ou tard, dans votre parcours d'apprentissage, ainsi que la suggestion de Charles, dans sa réponse, bien que ce soit un peu plus avancé, pour un débutant. Si l'une de ces réponses résout votre problème, n'oubliez pas de l'accepter. – afsantos

1

Si je lis bien votre question est alors la solution

total1+=(roll+roll1); 

qui est la même chose comme

total1= total1+(roll+roll1); 

Vous n'avez simplement pas ajouté les rouleaux à la valeur totale!

Il est également important de noter que vos variables d'instance sont publiques et statiques. Ce serait mieux s'ils étaient privés et non statiques. Par exemple

private int players; 

espère que la réponse aide

+0

merci pour la réponse. dans mon code d'origine, j'ai eu le total en ajoutant au prochain rouleau. je dois avoir en quelque sorte laissé tomber. le problème que j'ai est que quand il va afficher le total, il affiche un '0' – derek

0

Votre calcul de total1 devrait être total1 += roll et se produire après la nouvelle entrée du rouleau. Aussi, si roll1 représente le dernier jet, nommez la variable en conséquence, c'est beaucoup plus lisible.

Puisque vous avez beaucoup de joueurs, essayez d'abstraire les concepts et séparez l'entrée de la "comptabilité".Par exemple, vous pouvez créer une classe PlayerScore qui contient un total et la dernière entrée (et le nom du joueur), avec une méthode qui prend soin d'ajouter et d'enregistrer la dernière entrée, ainsi que de jolies impressions des informations. Vous pouvez alors avoir une collection de PlayerScore et parcourir, demander le rouleau actuel et mettre les infos à jour.