2013-07-30 1 views
0

J'ai corrigé mon problème en changeant la classe Die pour simplement retourner des valeurs au lieu de les imprimer, en changeant le PairOfDice pour avoir une méthode qui stocke les valeurs retournées. Voici le code de travail. Merci pour tout le monde.Somme de deux jets de dés en Java [résolu]

public class Die{ //only thing changed was removing implementation of the interface, added getRoll for summing values, deleted printRoll 

private int noFaces; 

public Die() { 
    noFaces = 6; 
} 

public int getNoFaces() {  //getter 
    return noFaces; 
} 

public Die(int noFaces) {  //setter, sets new value according to passed parameter 
    this.noFaces = noFaces; 
} 

public int roll() {    //generates random number+1 within specified "noFaces" range 
    return (int) (Math.random() * noFaces + 1); 
} 

public int getRoll(){   //creates roll value to be returned 
    int i = roll(); 
    return i; 
} 

} 

classe PairOfDice

public class PairOfDice { 

private Die d1, d2; 
int lastRollOne; 
int lastRollTwo; 

public PairOfDice() {  //initializes 2 die objects 
    d1 = new Die(); 
    d2 = new Die(); 
} 

public PairOfDice(int noFaces) { //sets the dice equally 
    d1 = new Die(noFaces); 
    d2 = new Die(noFaces); 
} 

public PairOfDice(int noFaces1, int noFaces2) { //sets dice separately 
    d1 = new Die(noFaces1); 
    d2 = new Die(noFaces2); 
} 

public void getLastRolls(){   //stores last rolls for summation 
    lastRollOne = d1.getRoll(); 
    lastRollTwo = d2.getRoll(); 
} 

public void printRoll() { //prints rolls 
    getLastRolls(); 
    System.out.println("Die 1 returned: " + lastRollOne); 
    System.out.println("Die 2 returned: " + lastRollTwo); 
    System.out.println("The sum of Die 1 and Die 2 are : " + (lastRollOne + lastRollTwo)); 

} 

} 

classe RollingDice

public class RollingDice { 

public static void main(String[] args) { 

    PairOfDice pairOne = new PairOfDice(); 
    pairOne.printRoll(); 
    System.out.println(); 

    PairOfDice pairTwo = new PairOfDice(10); 
    pairTwo.printRoll(); 
    System.out.println(); 

    PairOfDice pairThree = new PairOfDice(100, 3); 
    pairThree.printRoll(); 

} 

} 

sortie récente

Die 1 returned: 4 
Die 2 returned: 1 
The sum of Die 1 and Die 2 are : 5 

Die 1 returned: 9 
Die 2 returned: 3 
The sum of Die 1 and Die 2 are : 12 

Die 1 returned: 93 
Die 2 returned: 3 
The sum of Die 1 and Die 2 are : 96 
+0

Donc, vous voulez 'printRoll()' et 'printRollSum()' utiliser les mêmes numéros, est que la question ? Si c'est le cas, vous devez stocker le résultat des jets b/c chaque jet générera un nouveau nombre aléatoire. –

+2

Chaque fois que 'roll()' est appelé, un nouveau numéro est généré. – bowmore

Répondre

0

Comme solution, vous pouvez stocker la dernière valeur roulée dans votre Die classe (similaire à noFaces, mais l'appeler lastValue par exemple), puis changer printRollSum() à utiliser getLastValue() au lieu de roll()

+0

merci, j'ai ajouté un 'public int getPrintRoll() { \t \t int i = roll(); \t \t System.out.println (i); \t \t return i; \t} 'à ma classe Die.java – dcole617

3

Vous obtenez la somme des deux dés, mais vous rouler la dés chaque fois. printRoll() lance et affiche les valeurs, puis printRollSum() les recompose, ce qui vous donne des valeurs différentes.

0

La méthode roll() va générer un nouveau nombre aléatoire chaque fois qu'il est appelé, donc quand vous appelez printRoll() et printRollSum() vous recevrez de nouveaux numéros à chaque fois.

Vous devez stocker les résultats de roll dans l'une de vos classes, puis fournir une méthode pour accéder à ces résultats.

0

Il génère de nouveaux numéros chaque fois que printRoll et printRollSum sont appelés. Vous devez combiner les deux méthodes, ou au moins stocker la valeur actuelle du rouleau dans une matrice, et d'y accéder par printRollSum

0

Chacun de vos printRoll() et printRollSum() appelle est relaminage les dés. Si vous souhaitez lancer les dés, imprimez la valeur faciale de chaque dé, puis imprimez la somme de ces deux valeurs faciales, vous devrez stocker les résultats des jets, puis effectuer le calcul de la somme sur ces résultats. Par exemple:

public class PairOfDice { 

private Die d1, d2; 
int lastRollD1; 
int lastRollD2; 

public PairOfDice() {  //initializes 2 die objects 
    d1 = new Die(); 
    d2 = new Die(); 
} 

public PairOfDice(int noFaces) { //sets the dice equally 
    d1 = new Die(noFaces); 
    d2 = new Die(noFaces); 
} 

public PairOfDice(int noFaces1, int noFaces2) { //sets dice separately 
    d1 = new Die(noFaces1); 
    d2 = new Die(noFaces2); 
} 

public void roll() 
{ 
    lastRollD1 = d1.roll(); 
    lastRollD2 = d2.roll(); 
} 

public void printRoll() { //prints rolls 
    System.out.println("Die 1 returned: " + lastRollD1); 
    System.out.println("Die 2 returned: " + lastRollD1); 

} 

public void printRollSum(){  //print sum of both rolls 
    System.out.println("Sum of both dice rolls are: " + (lastRollD1 + lastRollD1)); 
} 

} 

Dans cette version, votre RollingDice alors appeler:

pairOne.roll(); 
pairOne.printRoll(); 
pairOne.printRollSum(); 
Questions connexes