我需要创建一个采用任何类型的多维数组的方法,并以人类可读的形式将其作为String返回。
例如:
input 1: [1, 2, 3]
output 1: { 1, 2, 3 }
input 2: [[1, 2, 3], [], [4, 5, 6]]
output 2: {
{ 1, 2, 3 },
{ },
{ 4, 5, 6 }
}
因此,该方法的签名类似于
String printArray(Object array)
{
...
}
到目前为止,我想出了如何以递归方式构建它。我想知道是否有可能避免递归。显然,这是一个研究问题,并且不会在生产中实施。
由于
编辑:
行。我想分享递归实现更容易:
private String writeArray(Object array, String indent, String result)
{
boolean isObjectArray = array.getClass().isArray();
if (isObjectArray)
{
int length = Array.getLength(array);
boolean isComponentArray = array.getClass().getComponentType().isArray();
result += indent;
result += (isComponentArray) ? "{\n" : "{ ";
int i = 0;
do
{
if (length != 0)
{
Object component = Array.get(array, i);
result = writeArray(component, indent + "\t", result);
}
if (i < length - 1)
result += (isComponentArray) ? ",\n" : ", ";
else
result += (isComponentArray) ? "\n" + indent + "}" : " }";
i++;
}
while (i < length);
}
else
{
result += array.toString();
}
return result;
}
答案 0 :(得分:0)
如果你想使用迭代而不是递归,你只需要意识到arrayOfArrays
有arrayOfArrays.length
个数组。每个子数组都有array.length
个元素。
这是int
数组的示例。
public class WhatChaMaCallIt {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3};
int[][] arr2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {}, {10, 11} };
System.out.println(print(arr1));
System.out.println(print(arr2));
}
private static String print(int[] arr) {
if (arr.length == 0) {
return "{ }";
}
StringBuilder sb = new StringBuilder();
sb.append("{ ")
.append(arr[0]);
for (int k=1; k < arr.length; k++) {
sb.append(", ")
.append(arr[k]);
}
sb.append(" }");
return sb.toString();
}
private static String print(int[][] arrOfArrs) {
if (arrOfArrs.length == 0) {
return "{ }";
}
StringBuilder sb = new StringBuilder();
sb.append("{\n");
sb.append(" ")
.append(print(arrOfArrs[0]));
for (int k=1; k < arrOfArrs.length; k++) {
sb.append(",\n")
.append(" ")
.append(print(arrOfArrs[k]));
}
sb.append("\n}");
return sb.toString();
}
}
输出
{ 1, 2, 3 }
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
{ },
{ 10, 11 }
}