在Java中打印骰子组合

在Java中打印骰子组合,java,statistics,Java,Statistics,对于一个项目,我需要找到一种方法来打印每一种方式滚动5个6面骰子,顺序不重要。我曾尝试使用嵌套for循环,但我知道这是打印置换而不是组合: int counter = 0; for(int i=1; i<7; i++) { for(int m = 1; m<7; m++) { for(int j = 1; j<7; j++) {

对于一个项目,我需要找到一种方法来打印每一种方式滚动5个6面骰子,顺序不重要。我曾尝试使用嵌套for循环,但我知道这是打印置换而不是组合:

int counter = 0;
        for(int i=1; i<7; i++) {
            
            for(int m = 1; m<7; m++) {
                
                for(int j = 1; j<7; j++) {
                    
                    for(int k = 1; k<7; k++) {
                        
                        for(int h = 1; h<5; h++) {
                            System.out.printf("%2d%2d%2d%2d%2d",i,m,j,k,h);
                            counter++;
                            System.out.println(" "+counter);
                        }
                    }
                }
            }
        }
int计数器=0;

对于(int i=1;i如果顺序不重要,请尝试:

for (int i = 1; i < 7; i++) {
    for (int m = i; m < 7; m++) {
        for (int j = m; j < 7; j++) {
            ...
for(int i=1;i<7;i++){
对于(int m=i;m<7;m++){
对于(int j=m;j<7;j++){
...
所有骰子相同,仅显示前3个骰子的张贴代码
也就是说,初始值永远不会小于上一个骰子的值-结果将排序。
(例如,仅考虑2个骰子,这将消除像
21
31
这样的结果,但允许
11
12
13



注意:更容易阅读(IMO):
对于(int i=1;i考虑这个带有两个六面骰子的简化示例:

for (int i = 1; i <= 6; i++)
    for (int j = 1; j <= 6; j++)
        System.out.println(i + " " + j);
在内部循环中,我以
I
的值而不是1开始每个迭代。这有什么作用?在第一次迭代中,您将只打印唯一的对。但是,在后续迭代中,我需要消除一个已经滚动的数字。我通过以
I。这保证没有重复对。例如,在第二次迭代中,我消除了“1”的值从当前的
i
值2开始;这将消除重复的
2 1
对,并以
2 2
开始第二轮。到最后一次迭代时,只会打印出剩余的唯一对:
6

这很简单。但是,添加另一个骰子如何影响解决方案?采用相同的方法。使用直接外部循环的计数器变量值启动最内部的循环,如下所示:

for (int i = 1; i <= 6; i++)
    for (int j = i; j <= 6; j++)
        for (int k = j; k <= 6; k++)
            System.out.println(i + " " + j + " " + k);

for(int i=1;我想打印5
6面骰子的所有可能结果吗?非常好!非常感谢您的回复!谢谢!非常好explanation@oshp谢谢!我忘了提到,例如,使用这种方法,迭代次数(5个骰子)从7776次(使用DUP)减少到大约256次。
for (int i = 1; i <= 6; i++)
    for (int j = i; j <= 6; j++)
        for (int k = j; k <= 6; k++)
            System.out.println(i + " " + j + " " + k);