3骰子总和计数程序Java

时间:2015-03-03 16:41:21

标签: java arrays sum counting dice

对于我的计算机科学课,我的老师要求我们执行以下操作:

项目描述:你正在学习玩一个涉及3个六面骰子的新游戏。你知道,如果你知道每个可能的骰子卷的可能性,你就会成为更好的竞争对手。

由于您刚刚研究过数组并使用它们来计算多个项目,因此该程序应该很容易编写。自上次我们这样做以来,这很酷,我们只是寻找9或10次可以滚动的次数,这个程序不需要任何if语句。

必需的语句:输出,循环控制,数组

示例输出:

数量可能的组合

1 0

2 0

3 1

4 3

5 6

6 10

7 15

8 21

9 25

10 27

11 27

12 25

13 21

14 15

15 10

16 6

17 3

18 1

我可以使用if语句轻松完成此操作,但我不明白如何在没有if语句的情况下执行此操作。它特别棘手,因为在提示下,她写道:“这些程序使用计数数组。每次生成一个值时,该索引处的位置都会递增。就像查找表的反向一样。”我不知道这意味着什么。

这是我的代码,带有if语句:

public class prog410a
{
    public static void main(String args[])
    {
        System.out.println("Number\tPossible Combinations");

        for (int x = 1; x <= 18; x++)
        {
            int count = 0;
            for (int k = 1; k <= 6; k++)
            {
                for (int i = 1; i <= 6; i ++)
                {
                    for (int j = 1; j <= 6; j++)
                    {
                        if (k + i + j == x)
                            count++;
                    }
                }
            }
            System.out.println(x + "\t\t\t" + count);
        }

    }
}

所以我想我的整体问题是:我如何模仿这个,但是使用某种数组而不是if语句?

4 个答案:

答案 0 :(得分:1)

您不需要外部x循环。您只需要三个嵌套循环,每个模具一个。您还需要一个全部初始化为零的整数数组。在最里面的骰子循环中,你只需使用三个骰子的总和作为整数数组的索引,并在该索引处增加值。

完成骰子循环后,您可以迭代整数数组并输出结果的频率。

答案 1 :(得分:0)

由于这是作业,我不会为你编写代码,只需给你一般大纲。

创建一个大小为18的计数数组。将所有值初始化为0。

有三个嵌套循环从1到6计数,就像你的三个内循环一样。这些代表骰子上的值。

在最里面的循环中,将三个循环计数器添加到一起。这是你的骰子总数,你用它作为count数组的索引来增加该索引的值。

退出三个嵌套循环后,使用另一个循环遍历count数组以打印出值。

答案 2 :(得分:0)

这似乎有效 - 而且没有if

public void test() {
    // Remember to -1 because arrays are accessed from 0 to length-1
    int[] counts = new int[18];
    // Dice 1.
    for (int k = 1; k <= 6; k++) {
        // Dice 2.
        for (int i = 1; i <= 6; i++) {
            // Dice 3.
            for (int j = 1; j <= 6; j++) {
                // Count their sum (-1 as noted above).
                counts[i + j + k - 1] += 1;
            }
        }
    }
    // Print out the array.
    System.out.println("Number\tPossible Combinations");
    for (int i = 0; i < counts.length; i++) {
        System.out.println("" + (i + 1) + "\t" + counts[i]);
    }
}

基本上你在数组中构建结果然后输出它们。

答案 3 :(得分:0)

来自维基百科:In computer science, a lookup table is an array that replaces runtime computation with a simpler array indexing operation. The savings in terms of processing time can be significant, since retrieving a value from memory is often faster than undergoing an 'expensive' computation or input/output operation.,这意味着通常我们使用查找表来通过将某个进程预先计算到我们已经存储结果的表中来节省计算时间。在这种情况下,您使用该过程来存储数组中可能结果的数量。基本上你正在为骰子结果建立一个查找表。只需要三个内环。

        for (int k = 1; k <= 6; k++)
        {
            for (int i = 1; i <= 6; i ++)
            {
                for (int j = 1; j <= 6; j++)
                {
                    arr[k + i + j-1] = arr[k + i + j-1] +1;
                }
            }
        }

这就是发生的事情:

dices   index
i j k  (i+j+k)
1 1 1     3
1 1 2     4
1 1 3     5
1 1 4     6
1 1 5     7
1 1 6     8
1 2 1     4
1 2 2     5
1 2 3     6
1 2 4     7
1 2 5     8
1 2 6     9
1 3 1     5
1 3 2     6
.
.
.

您正在枚举每个可能的结果,然后在生成索引的数组中添加点。完成嵌套循环后,您将拥有一个包含所需信息的数组。