2014-02-05 23 views
0

我正在一個骰子滾動項目上工作,有點卡住了。我仍然不熟悉Java編程和使用數組,所以我敢肯定我搞砸了一些東西。最終目標是輸出一個包含擲骰數量(我有和正在使用的數量)的表格,然後根據擲骰子擲出的擲骰數量加起來的骰子總數。表格工作正常,但我無法獲得總和。如果我擲4骰子,我仍然可以得到1-3。任何人都可以給我一個領導與合作?我卡住了! ):爪哇:骰子滾動和不正確的總和

import javax.swing.*; 
import java.util.Random; 

public class Lab1 { 

    private static int N = 0; 
    private static int M = 0; 
    private static int total = 0; 
    private static Random rnd = new Random(); 
    private final static int FACENUMBER = 6; 
    private static int faceValue = 1; 

    public Lab1() { 
    } 

    public static void main(String[] args) { 

     N = Integer.parseInt(JOptionPane.showInputDialog("How many dice would you like to roll?")); 
     System.out.println("Dice: " + N); 

     M = Integer.parseInt(JOptionPane.showInputDialog("How many times would you like to roll?")); 
     System.out.println("Rolls: " + M); 

     System.out.println(); 

     int total[] = new int[(M) + 1]; 

     for (int roll = 1; roll <= M; roll++) { 
      total[roll] = rnd.nextInt(FACENUMBER * N) + 1; 
     } 

     System.out.printf("%3s%12s\n", "Rolls", " Sum of Rolls"); 

     for (int k = 1; k < total.length; k++) { 
      System.out.printf("%3s%12s\n", k, total[k]); 
     } 
    } 
} 
+0

數組由索引進行尋址。例如總計[指數]。在Java中,索引值從零開始(0)。你的循環「(int roll = 1 ...」跳過第一個值 – DwB

+0

@DwB:如果不是故意的,這個處理似乎是用'new int [(M)+1]'和roll <= M '提醒我BASIC。 –

+0

如果OP有意從1開始,那麼這是錯誤的:「int k = 1; k DwB

回答

1

使用:

rnd.nextInt(FACENUMBER*N)+1; 

你得到1(FACENUMBER*N)+1

之間

一個隨機數,如果用戶輸入10 N,每個滾你獲得 161之間的數字,當你真的想要一個在 1060之間的數字。 你想要的是:

rnd.nextInt((FACENUMBER-1)*N)+N 

這並不是雖然要模擬骰子的正確方法。爲了說明一個事實,即只有一個滾60個,但許多方面推出其他類似總數30.下列解決方式越好:

for(int roll=0; roll<N; roll++) { 
    total[roll] = rnd.nextInt(FACENUMBER)+1 
} 
+0

完美的工作!非常感謝! – Bfrank

+3

不,結果仍然不正確,因爲它與N個獨立的骰子的總和不相同。 – pjs

+0

@pjs你是對的,我差點忘了。 – Jordonias