Java 带字符串数组的组合数学
我找到了一个打印字符串所有组合的解决方案。以下代码的输出为: 丰田黑色轿车Java 带字符串数组的组合数学,java,arrays,for-loop,while-loop,Java,Arrays,For Loop,While Loop,我找到了一个打印字符串所有组合的解决方案。以下代码的输出为: 丰田黑色轿车 本田黑色轿车 丰田红色轿车 本田红色轿车 丰田黑色suv 本田黑色suv 丰田红色suv 本田红色suv String[][] sets = new String[][] {{"Toyota", "Honda"}, {"black", "red"}, {"sedan", "suv"}}; int[] state = new int[sets.length]; int p = 0; while (true) { f
本田黑色轿车
丰田红色轿车
本田红色轿车
丰田黑色suv
本田黑色suv
丰田红色suv
本田红色suv
String[][] sets = new String[][] {{"Toyota", "Honda"}, {"black", "red"}, {"sedan", "suv"}};
int[] state = new int[sets.length];
int p = 0;
while (true) {
for (int i = 0; i < state.length; i++) {
System.out.print(sets[i][state[i]] + " ");
}
System.out.println();
state[p]++;
while(state[p] == sets[p].length) {
state[p] = 0;
p++;
if (p == sets.length) return;
state[p]++;
}
p = 0;
}
String[][]set=新字符串[][{{“丰田”、“本田”}、{“黑色”、“红色”}、{“轿车”、“suv”};
int[]state=newint[sets.length];
int p=0;
while(true){
for(int i=0;i
有人能详细解释一下第二个while循环在做什么吗?
状态在这里被用来模拟一个多重嵌套for循环。如果您知道集合中有3个集合
,您可以通过以下方法来实现这一点
for (int i = 0; i < sets[2].length; i++) {
for (int j = 0; j < sets[1].length; j++) {
for (int k = 0; k < sets[0].length; k++) {
// form output from sets[0][k], sets[1][j], sets[2][i]
}
}
}
将递增状态[0]
,因为此时p
必须始终为0(为了清晰起见,我认为应该将其写入状态[0]+
)。现在我们需要处理已经达到极限的索引,这就是第二个while
循环所做的:
while(state[p] == sets[p].length) {
state[p] = 0;
p++;
if (p == sets.length) return;
state[p]++;
}
从p==0
开始,我们查看状态[0]
是否已达到其极限(即k==set[0]。嵌套示例中的长度)。如果有,我们模拟退出for
循环,将该索引重置为0(提前),然后移动到下一个外部for
循环。现在p==1
,因此我们将增加状态[1]
,它在嵌套的示例中是j
<代码>状态[p]+
递增j
,然后我们返回while
循环的顶部,查看j
是否已达到其极限。如果是这样,我们做同样的事情——将j
重置为0,然后查看与i
等价的state[2]
,依此类推……state
的条目是集合
子数组的索引,这些子数组表示构成当前生成的组合的那些子数组中的字符串。第二个循环在状态下推进索引
,以选择下一个组合
while(state[p] == sets[p].length) {
state[p] = 0;
p++;
if (p == sets.length) return;
state[p]++;
}