2016-04-05 17 views
0

Kaybettim ve her şeyi döngülere girip çıkarmaya çalıştım. Ben 20 kez yuvarladım ve diziyi basarken sadece bir rulo çıkıyor. Neyi eksik veya yanlış yapıyorum? Ayrıca, if ve else if ifademi nasıl kısaltabilirim, bu yüzden aDie cpp'de bu kadar gereksiz değilsiniz?C++ dizim, rulolarımı kaydetmiyor

Çözüm, işçim yapıcıdaki iş kanununun altında olduğunu bildirmekti.

Başlık dosya aDie.h

#define aDie_H 
class aDie { 
public: 
    aDie(); 
    void numRolls(); 
    void getSeed(); 
    void roll(); 
    void rolls(); 
    void array(); 
    void Print(); 

private: 
    int Rolls; 
    int dSeed; 
    int die1; 
    int die2; 
    int sum; 
    int DieFace[6]; 
    int i = 0; 
}; 

CPP Bu bölümde aDie.cpp

#include "aDie.h" 
#include <iostream> 
#include <ctime> 
using namespace std; 

aDie::aDie() { //constructor sets values to default 0 
    die1 = 0; 
    die2 = 0; 
    dSeed = 0; 
    DieFace[0] = 0; //declare array 
    DieFace[1] = 0; 
    DieFace[2] = 0; 
    DieFace[3] = 0; 
    DieFace[4] = 0; 
    DieFace[5] = 0; 
} 
void aDie::numRolls() { 
    cout << "Enter number of times for die to be rolled: "; 
    cin >> Rolls; 
    return; 
} 
void aDie::getSeed() { //gets seed 
    cout << "Enter desired seed number: "; 
    cin >> dSeed; 
    srand(dSeed); 
    return; 
} 
void aDie::roll() { //rng for one die 
    die1 = 1 + rand() % 6; 
}  
void aDie::array() { 
    DieFace[die1 - 1] = DieFace[die1 - 1] + 1; 
} 

void aDie::Print() { 
    for (i = 0; i < 6; i++) { //loop to display dieFace[i] frequency 
     cout << i + 1 << " Was Rolled: " << DieFace[i] << " Times." << endl; 
    } 
} 

main.cpp

#include <iostream> 
using namespace std; 

#include "aDie.h" 

void game1(); 

int main(){ 
    game1(); 

    system("Pause"); 
     } 

     void game1(){ 
     int i = 0; 
     int Rolls = 0; 

     cout << "Enter number of times for die to be rolled: "; 
     cin >> Rolls; 

     aDie Roll1; //calls default constructor 
     Roll1.getSeed(); //calls seed 

     for (i = 0; i < Rolls; i++) { 
      Roll1.roll(); //rolls die 
      Roll1.array(); 
     } 

     Roll1.Print(); 
} 
+0

Lütfen Doğru Adlandırma (Değişkenler, İşlevler .. vb.) Kullanın. –

+1

'for' döngüsünde' Roll1.array(); 'ifadesini çağırabilirsiniz. Bu, her zaman "DieFace" dizisini sıfırlar. DieFace'ı ctorda başlatmalısın. –

+0

Sorun değil, "dizideki tüm if-else-if" bloğu sadece "DieFace" için yapılabilir [die1 - 1] = DieFace [die1 - 1] + 1; ' – NathanOliver

cevap

1

dosyası:

void aDie::array() { 
    DieFace[0] = 0; //declare array 
    DieFace[1] = 0; 
    DieFace[2] = 0; 
    DieFace[3] = 0; 
    DieFace[4] = 0; 
    DieFace[5] = 0; 

    if (die1 == 1) 
     DieFace[0] = DieFace[0] + 1; 
    else if (die1 == 2) 
     DieFace[1] = DieFace[1] + 1; 
    else if (die1 == 3) 
     DieFace[2] = DieFace[2] + 1; 
    else if (die1 == 4) 
     DieFace[3] = DieFace[3] + 1; 
    else if (die1 == 5) 
     DieFace[4] = DieFace[4] + 1; 
    else if (die1 == 6) 
     DieFace[5] = DieFace[5] + 1; 
} 

Diziyi çağırırken dizinizdeki her değeri sıfırlarsınız. Bu nedenle, aDie::array()'u çağırıp çağırdığınız sayıda bağımsız olarak, döngüden sonra yazdırmayı çağırdığınızda yalnızca son rulo hala dizide.

İlgili konular