2011-03-31 47 views
0

好吧,所以我必須寫一個類和驅動程序,用戶輸入的骰子數和擲骰數。然後我必須根據骰子的數量* 6做出一個數組,但我會得到錯誤。像arrayindexoutofboundsexception。滾動骰子類和驅動程序

我做了數組後,我必須用隨機數填充它並使用直方圖來顯示程序。所以程序應該看起來像這樣 請給這裏任何積極的幫助,即時通訊新的編程這個,我想了解更多。還我似乎無法弄清楚,如果爲Y/N區域語句來啓動程序

Welcome to the dice-rolling simulator! 

Do you wish to run a simulaton? Y/N: x 

that was an invalid option. Please try again. 

Do you wish to run a simulation? Y/N: y 

How many dise di you wish to roll? 2 

How many rolls to you wish to make? 100000 

2:@@@@@@ 

3:@@@@ 

4:@@@@@@@@@@@ 

5:@@@@@ 

6:@@ 

7:@ 

8: 

9:@@@@@@@@@@ 

10:@@@ 

11:@@@@@@@@@@@@@@ 

12:@@@@@@ 

//我不得不給你@符號,因爲*不會在這裏工作

這裏是我的節目更新!我如何創建直方圖?

package dice; 

import java.util.Scanner; 
import java.util.Random; 

public class Dice 
{ 
    public static Scanner in = new Scanner (System.in); 



    private int dice = 0; 
    private int roll = 0; 
    private int start; 
    private int[] diceAr; 
    private int[] rollAr; 
    private int simDice; 
    private String star = "*"; 

     //****************************************************************  
    public Dice() 
    { 
     System.out.println("Welcome to the dice-rolling simulator!\n"); 
     System.out.println("Do you wish to run a simulation? Y/N; "); 
     //start = in.nextInt(); 


     while (true) { 

     System.out.print ("How Many Dice Do You Want To Roll? "); 
      dice = in.nextInt(); 
      simDice = (dice * 6)-1; 
      diceAr = new int[simDice]; 

       if (dice > 0) 
        break; 
      } 


     while (true) { 

     System.out.print ("How Many Times Do You Want To Roll? "); 
      roll = in.nextInt(); 
      rollAr = new int[roll]; 

       if (roll > 0) 
        break; 
     } 
    } 
    //**********************************************  

     // public void display() 
     // { 
    // 
     for (int i = 0; i < simDice; i++) 
     //  { 
     //   diceAr[i] = (int)(Math.random()* simDice); 
     //    
     //  } 
     //  for(int i = 0; i<simDice; i++) 
     //  { 
     //   System.out.println((i + dice) + ". " + diceAr[i]); 
     //  } 
     //  
     // } 
    //********************************************************* 

    public void display(int diceAr[], int simDice, int roll) 
    { 
     for(int i=0; i < simDice; i++) 
     { 
      diceAr[i] = (int) (Math.random()* simDice); 

     } 

     for(int i=0; i < roll; i++) 
     { 

     } 

    } 

} 
+0

聞起來像功課,所以我添加了作業標記 – 2011-03-31 09:50:35

+0

是的,但我問了一個很好的問題,我只是有點卡在這一點上,我想在我明天得到教授幫助之前完成儘可能多的工作 – Dakota 2011-03-31 09:54:50

+0

沒有錯!這只是「維護」;)您還應該考慮在主函數中放置「掃描」邏輯,以便在收集所需變量後,可以通過將這些值傳遞給構造函數來實例化Dice對象類骰子。 – 2011-03-31 09:56:40

回答

0

你宣佈diceAr是大小「骰子」,但後來與上升到「simDice」,這骰子= 6 *

2

從的措辭來看一個變量建立索引問題程序詢問和你給出的樣本直方圖,看起來這個任務是編寫一個程序來模擬滾動N骰子M次,然後做一個直方圖的結果(即骰子上的數字之和on每卷)。所以如果你輸入3個骰子和100個骰子,它應該就像你用手骰子擲3次骰子100次。

即使拋開ArrayIndexOutOfBoundsException問題,也就是而不是你的代碼正在做什麼。由於這是承認作業,我不會給任何代碼,至少在這一點上。但是我確實有一些建議/問題可以幫助您更好地考慮問題,也許您可​​以向我們展示在考慮後如何更改代碼。

首先,考慮實際上手動完成任務。找到兩個或三個骰子並滾動它們,例如20次,然後在紙上製作結果的直方圖。你可能會發現,僅僅這樣做會讓你瞭解你的程序必須做什麼並保持跟蹤。

接下來,這裏有一些問題,這可能會幫助你集中思考:

  • 如果您滾動骰子2,什麼是卷的最低可能的結果?最高的是什麼?
  • 如果你擲3骰子,擲骰子的最高和最低結果是什麼?
  • 如果您正在滾動N骰子,擲骰子的最高和最低結果是什麼?
  • 當你模擬一個卷,你如何確定卷的結果是什麼?
  • 你應該追蹤哪些數據,結果應該多大?
  • 如何跟蹤結果,以便稍後可以製作直方圖?
  • 除了結果之外,還有什麼需要存儲的?

想想這一切,手動進行「實驗」,然後回過頭來看看您對程序所做的更改以及您可能遇到的新問題。