2014-04-16 52 views
0

我無法計算出一對骰子滾動總和的頻率。我被告知必須使用一維整數數組來計算每個可能總和出現在36000卷中的次數。自從我們剛開始討論數組以來,我不確定自己應該做什麼。以下是指示的鏈接:http://s65.photobucket.com/user/jls7884/media/DicePic-page-001_zpsd45d977f.jpg.html?filters[user]=139936213&filters[recent]=1&sort=1&o=0通過計算總和,頻率和百分比來模擬骰子滾動

這裏是我到目前爲止的代碼:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package Dice; 

/** 
* 
* @author Jacob 
*/ 
import java.util.Random; 
public class Dice 
{ 
public static void count1() 
{ 
    int count; 

    int frequency[] = new int[7]; 
    frequency[1] = 2; 

    count = 1; 
    while (count <= 6) 
    { 
     frequency[count] = count + 1; 
     count++; 
    } 

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n" 
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]  
    ); 
} 

public static void count2() 
{ 
    int count; 

    int frequency[] = new int[8]; 
    frequency[1] = 3; 

    count = 1; 
    while (count <= 6) 
    { 
     frequency[count] = count + 2; 
     count++; 
    } 

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n" 
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]  
    ); 
} 

public static void count3() 
{ 
    int count; 

    int frequency[] = new int[7]; 
    frequency[1] = 4; 

    count = 1; 
    while (count <= 6) 
    { 
     frequency[count] = count + 3; 
     count++; 
    } 

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n" 
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]  
    ); 
} 

public static void count4() 
{ 
    int count; 

    int frequency[] = new int[7]; 
    frequency[1] = 5; 

    count = 1; 
    while (count <= 6) 
    { 
     frequency[count] = count + 4; 
     count++; 
    } 

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n" 
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]  
    ); 
} 

public static void count5() 
{ 
    int count; 

    int frequency[] = new int[7]; 
    frequency[1] = 6; 

    count = 1; 
    while (count <= 6) 
    { 
     frequency[count] = count + 5; 
     count++; 
    } 

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n" 
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]  
    ); 
} 

public static void count6() 
{ 
    int count; 

    int frequency[] = new int[7]; 
    frequency[1] = 7; 

    count = 1; 
    while (count <= 6) 
    { 
     frequency[count] = count + 6; 
     count++; 
    } 

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n" 
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]  
    ); 
} 

public static void main(String[] args) 
{ 
    int num1 = 1; 
    int num2 = 2; 
    int num3 = 3; 
    int num4 = 4; 
    int num5 = 5; 
    int num6 = 6; 

    int num = 0; 
    while (num < 7) 
    { 
     System.out.printf ("%-3d", num++); 
    } 

    System.out.println(); 
    System.out.printf ("%d: ", num1); 
    Dice.count1(); 
    System.out.printf ("%d: ", num2); 
    Dice.count2(); 
    System.out.printf ("%d: ", num3); 
    Dice.count3(); 
    System.out.printf ("%d: ", num4); 
    Dice.count4(); 
    System.out.printf ("%d: ", num5); 
    Dice.count5(); 
    System.out.printf ("%d: ", num6); 
    Dice.count6(); 

    String sumStr = "Sum"; 
    String frequencyStr = "Frequency"; 
    String percentageStr = "Percentage"; 
    System.out.printf ("%-5s %-12s %s", sumStr, frequencyStr, percentageStr); 
    System.out.println(); 

    Random rollDie = new Random(); 

    for (int i = 1; i <= 36000; i++) 
    { 
     int die1 = 1 + rollDie.nextInt ((6)); 
     int die2 = 1 + rollDie.nextInt ((6)); 

     int sum = die1 + die2; 
    } 

    int count = 2; 
    while (count <= 12) 
    {  
     int frequency = 1003; 
     double minusFrequency = 36000 - frequency; 
     double divideTotal = minusFrequency/36000; 
     double percentageTotal = divideTotal * 100; 
     double calculatePercentage = 100 - percentageTotal; 
     double percentage = calculatePercentage; 

     int sumCount = count++; 
     System.out.printf ("%3d %11d %12.1f%% \n",sumCount, frequency, percentage); 
    } 
} 

}

任何幫助,將不勝感激。

謝謝,雅各布

回答

1

你會怎麼做它在紙上?

您可以將一張紙分成12列(一個用於1,一個用於2等,直到12)。然後,你將擲骰子3600次,每次你得到一個7,例如,你會在第7列中添加一個標記。然後你會計算每列中的標記,並將總和除以3600以得到它們的值頻率。

只要在Java中做同樣的事情:有一個int[] counts 12個元素的數組。然後做一個從0到3600的循環。在每次迭代中,滾動骰子,然後遞增與獲得的值相對應的數組元素。所以,舉個例子,如果你得到第7,喲會增加數組的第7個元素。

0

也許說明書要求您創建所有單獨的方法,但我個人會將其編碼如下。這將填充你的數組,然後你可以使用它來計算/打印使用for循環要求的任何內容。例如,如果你想計算總和2從36,000卷中滾出的百分比,你可以這樣做:double percentage = frequencies [0]/36000;

Random ranNum = new Random(); 
int[] frequencies = new int[11]; 
int face1; 
int face2; 
int sum; 

Arrays.fill(frequencies, 0); 

for(int count = 1; count <= 36000; count++) 
{ 
    face1 = 1+randomNumbers.nextInt(6); 
    face2 = 1+randomNumbers.nextInt(6); 
    sum = face1 + face2; 

    switch(sum) 
    { 
    case 2: frequencies[0] += 1; 
    break; 
    case 3: frequencies[1] += 1; 
    break; 
    case 4: frequencies[2] += 1; 
    break; 
    case 5: frequencies[3] += 1; 
    break; 
    case 6: frequencies[4] += 1; 
    break; 
    case 7: frequencies[5] += 1; 
    break; 
    case 8: frequencies[6] += 1; 
    break; 
    case 9: frequencies[7] += 1; 
    break; 
    case 10: frequencies[8] += 1; 
    break; 
    case 11: frequencies[9] += 1; 
    break; 
    case 12: frequencies[10] += 1; 
    break; 
    } 
} 
+0

switch語句可通過'頻率來代替'sum-2] + = 1;' –

+0

我試圖實現你的方法,但是當編碼公式來計算百分比時,它會打印多個值都是0的值。我通過爲其中一個數組元素添加打印語句來測試您的方法,並且它正在生成我假設爲36000個不同的值。 – user3440443

+0

我很困惑,爲什麼我會得到36000個不同的值。我需要做的是計算每次出現的總和數量,我認爲每次都會有所不同。 – user3440443

0

我有一位朋友幫助我上課。我爲以前的評論道歉。我沒有仔細查看代碼,以瞭解它在做什麼。根據我現在通過查看你的代碼和JB nizet的邏輯,現在理解的是,switch語句取得了與數組中每個元素相對應的總和的值,並根據找到的相應總和值的數量進行遞增。我最初聲明並初始化了for循環以及print語句中的數組,爲什麼我得到了36000個值。然後我將數組聲明和賦值移到了循環之外,這樣我就可以在整個程序中使用它,然後我修復了我的while循環從[0,10]開始,並添加了兩個數來獲得可能的總和值[2,12]然後通過將頻率值傳遞給頻率陣列來打印出頻率。在編寫公式來計算出我遇到的0.0%作爲百分比值的問題時所遇到的百分比。我能夠通過將我的整型數組轉換爲double來解決這個問題。用於參考,在這裏是我結束了的代碼和對應的輸出的一個示例:

代碼:

import java.util.Arrays; 
import java.util.Random; 
public class Dice 
{ 
public static void main(String[] args) 
{ 
    String sumStr = "Sum"; 
    String frequencyStr = "Frequency"; 
    String percentageStr = "Percentage"; 
    System.out.printf ("%-5s %-12s %s", sumStr, frequencyStr, percentageStr); 
    System.out.println(); 

    Random rollDie = new Random(); 

    int frequencies[] = new int [11]; 

    Arrays.fill(frequencies, 0); 

    for (int i = 1; i <= 36000; i++) 
    { 
     int die1 = rollDie.nextInt (6) + 1; 
     int die2 = rollDie.nextInt (6) + 1; 

     int sum = die1 + die2; 

     switch (sum) 
     { 
      case 2: frequencies[0]++; 
      break; 

      case 3: frequencies[1]++; 
      break; 

      case 4: frequencies[2]++; 
      break; 

      case 5: frequencies[3]++; 
      break; 

      case 6: frequencies[4]++; 
      break; 

      case 7: frequencies[5]++; 
      break; 

      case 8: frequencies[6]++; 
      break; 

      case 9: frequencies[7]++; 
      break; 

      case 10: frequencies[8]++; 
      break; 

      case 11: frequencies[9]++; 
      break; 

      case 12: frequencies[10]++; 
      break; 

      default: 
      break; 
     } 
    } 

    int count = 0; 
    while (count <= 10) 
    {  
     double percentage = ((double) frequencies[count]/36000) * 100; 

     System.out.printf ("%3d %11d %12.1f%% \n",count + 2, frequencies[count], percentage); 
     int sumCount = count++; 
     } 
    } 
} 

輸出:

Sum Frequency Percentage 
    2  1013   2.8% 
    3  1953   5.4% 
    4  2997   8.3% 
    5  4012   11.1% 
    6  5015   13.9% 
    7  6093   16.9% 
    8  4966   13.8% 
    9  3999   11.1% 
10  3024   8.4% 
11  1944   5.4% 
12   984   2.7%