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)
我究竟做错了什么?
正如您的问题的评论所示,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)