列出所有可能的组合

Sno*_*Mac 0 java arrays algorithm

这是我想要做的:

给定一个名称列表,打印出一次三个名称的所有组合.如果列表中的元素太少,请不要打印任何内容.名称必须与它们在列表中显示的顺序相同.因此,如果列表中包含Kennedy,Johnson,Nixon,Ford等名称,则会打印出以下内容:

[肯尼迪,约翰逊,尼克松]
[肯尼迪,约翰逊,福特]
[肯尼迪,尼克松,福特] [约翰逊,尼克松,福特]

将值放在数组中,然后使用Arrays.toString()方法打印结果,每行一个.

参数:list - - 名称列表.

现在我正在使用print语句来查看我是否在正确的轨道上,如果我是,我将完成将其调整为数组.

这是我的代码:

int x = 0;
 int y = 1; 
 int z = 2; 


 for(int i = 0; i<list.length;i++){

  for (int j = 0;j<3;j++){

   System.out.print(list[x]);
   System.out.print(list[y]);
   System.out.print(list[z]);

   if (j>=1){y++;}
   if (z != list.length){z++;}

  }
  x++; 

 }
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Enter commands:
trio Kennedy, Johnson, Nixon,ford
Kennedyjava.lang.ArrayIndexOutOfBoundsException: 1
 at MyAssign1.trio(MyAssign1.java:204)
 at Assign1.processOneCommand(Assign1.java:109)
 at CmdInterpreter.processCommands(CmdInterpreter.java:198)
 at CmdInterpreter.processCommands(CmdInterpreter.java:230)
 at CmdInterpreter.ooMain(CmdInterpreter.java:243)
 at MyAssign1.main(MyAssign1.java:20)
Run Code Online (Sandbox Code Playgroud)

204行是:

System.out.print(list[y]);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

vz0*_*vz0 5

正如您的问题的评论所示,ArrayIndexOutOfBoundsException异常发生是因为您正在访问超出数组限制的索引list.看一看:

if (j>=1){y++;}
Run Code Online (Sandbox Code Playgroud)

价值y总是在增加.在list.length迭代之后,异常肯定会提高.异常的解决方案很简单:不要访问索引超出其范围的数组.

虽然存在许多解决组合问题的方法,但让您回到正轨的最简单方法是:

for (int a = 0; a < list.length; a++) {
    for (int b = a + 1; b < list.length; b++) {
        for (int c = b + 1; c < list.length; c++) {
            System.out.print(list[a] + ", ");
            System.out.print(list[b] + ", ");
            System.out.println(list[c]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)