Saya sedang menulis sebuah program yang menggulung _ jumlah _ dadu bersisi _ kali seperti yang ditentukan oleh pengguna. Ini adalah proyek dengan persyaratan yang ditetapkan seperti struktur kelas dan fakta bahwa saya harus menggunakan array untuk menunjukkan hasil saya. Hasilnya seharusnya menampilkan setiap total yang mungkin saya dapatkan dan berapa kali saya mendapatkan setiap total setelah bergulir untuk jumlah waktu yang ditentukan.

Saya telah menulis upaya saya untuk ini dan sepenuhnya berharap itu berhasil, tetapi tentu saja tidak. Melempar 1.000 kali dan melempar 2 dadu dengan 6 sisi, inilah hasil saya:

4) 4
6) 4
8) 4
10) 4
12) 4

Saya mengharapkan sesuatu seperti:

2) 85
3) 83
4) 84
5) 82
... until 12

Jumlahnya tidak dimulai dari 2, tetapi dimulai dari 4, itu bergulir 20 kali, bukan 1.000, dan semua nilainya sama. Tahu apa yang bisa salah?

Berikut kode saya:

    private int[] myTotals;
    private int possibleTotal = 2;
    private int arrayLocation = 0;
    private int myNumberOfDice;
    private string results = "";
    private static Random diceGenerator = new Random();

    public DiceFactory()
    {

    }

    public void rollDice(int numberOfRolls, int numberOfSides, int numberOfDice)
    {
        myNumberOfDice = numberOfDice;

        myTotals = new int[numberOfRolls];

        arrayLocation = possibleTotal - 2;

        for (int i = 0; i < numberOfRolls; i++) {
            myTotals[arrayLocation] = diceGenerator.Next(1, numberOfSides + 1);
            myTotals[arrayLocation]++;
        }

        while (possibleTotal <= numberOfSides * myNumberOfDice)
        {
            results += (possibleTotal) + ") " + myTotals[arrayLocation] + "\r\n";
            possibleTotal++;
        }
    }

    public string getResults()
    {

        return results;
    }

}
0
VArchive 22 April 2020, 23:36

1 menjawab

Jawaban Terbaik

arrayLocation disetel ke 4 (6 - 2) di awal metode Anda, dan tidak berubah saat Anda melewati loop bergulir atau loop pembangunan hasil. Itu menjelaskan mengapa Anda melihat nilai 4 untuk semua keluaran Anda.

Saya sarankan tetap menggunakan loop for sederhana untuk loop pengembangan hasil Anda:

for (int i = 2; i <= numberOfSides * myNumberOfDice; i++)
{
    results += (i) + ") " + myTotals[i] + "\r\n";
}

Itu bukan satu-satunya masalah Anda. Anda harus mencari cara untuk menjumlahkan hasil dari melempar beberapa dadu. (Kode Anda saat ini tidak menggunakan myNumberOfDice dalam loop bergulir.) Pelajari cara menggunakan debugger dan pahami apa yang pikir seharusnya ada di setiap variabel di setiap langkah, dan bandingkan dengan apa yang sebenarnya muncul di setiap langkah. Memecah hal-hal kompleks menjadi langkah-langkah kecil yang dapat diverifikasi adalah inti dari pengembangan perangkat lunak.

0
StriplingWarrior 22 April 2020, 21:19