当我尝试做这样的事情时,我意识到我真的需要去上大学!
无论如何我有一个字符串数组(275)我需要循环遍历它们并用Java创建所有可能对的字符串。
我一直在学习递归,但我找不到答案。
答案 0 :(得分:9)
如果对ab
和ba
不同,请执行:
for i=0 to array.length
for j=0 to array.length
if i == j skip
else construct pair array[i], array[j]
如果没有,请执行以下操作:
for i=0 to array.length-1
for j=i+1 to array.length
construct pair array[i], array[j]
请注意,我假设数组包含唯一的字符串!
答案 1 :(得分:2)
我提供了一个打印所有可能的n元组字符串的示例,只需将属性reqLen设置为2并打印所有可能的对。
public class MyString {
String[] chars = {"a", "b", "c"};
int reqLen = 2;
private void formStrings(String crtStr){
if (crtStr.length() == reqLen){
System.out.println(crtStr);
return;
}
else
for (int i = 0; i < chars.length; i++)
formStrings(crtStr + chars[i]);
}
public static void main(String[] args) {
new MyString().formStrings("");
}}
答案 2 :(得分:1)
这是一个简单的双循环:
for(int x = 0; x < 275; x++) {
final String first = arrayOfStrings[x];
for(int y = 0; y < 275; y++) {
if(y == x) continue; // will properly increase y
final String second = arrayOfStrings[y];
// TODO: do stuff with first and second.
}
}
修改:正如评论所指出的,如果元素[a, b, c]
只有一个ab
而不是ba
(称为组合),那么以下代码将起作用:
final ArrayList<String> collected = new ArrayList<String>();
for(int x = 0; x < 275; x++) {
for(int y = 0; y < 275; y++) {
if(y == x) continue; // will properly increase y
final String p1 = arrayOfStrings[x] + arrayOfStrings[y];
final String p2 = arrayOfStrings[y] + arrayOfStrings[x];
if(!collected.contains(p1) && !collected.contains(p2)) {
collected.add(p1);
}
}
}
// TODO: do stuff with collected