方法“组合”应该是输入数组的组合。我想把这个组合流保存到一个文件里。
public void writeDot() {
try (PrintStream out = new PrintStream(path, "UTF-8")) {
out.print("digraph {\n");
String[] arr = {"hyo", "ji", "yoo", "mi", "vi", "se", "ari"};
combination(arr, 2, 0, new String[2])
.stream()
.map(a -> Arrays.toString(a).join(" -> "))
.forEach(out::print);
out.println(";\n");
out.println("}");
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
组合方法如下:
public List<String[]> combination(String[] arr, int len, int startPosition, String[] result) {
if (len == 0) {
//System.out.println(Arrays.toString(result));
return null;
}
for (int i = startPosition; i <= arr.length - len; i++) {
result[result.length - len] = arr[i];
combination(arr, len - 1, i + 1, result);
list.add(result);
}
return list;
}
我期望的结果是:
digraph {
hyo -> ji;
ji -> hyo;
and so on..
}
但我只得到:
digraph {
;
}
我的代码怎么了?请帮帮我。
2条答案
按热度按时间h9a6wy2h1#
似乎您的组合方法有一些问题,这些问题对您的案例没有帮助,因为您递归地调用它时只生成一个新的结果数组。相反,尝试一种更好的组合方法——最好使用经过良好测试的库,比如ApacheCommons或guava。
此外,您还需要更新
map(join)
talex描述的方法调用。kyxcudwk2#
String.join
是接受两个参数的静态方法:分隔符和元素数组。您不传递任何元素,所以结果是空字符串。
正确的代码是: