打印一个2d数组java

时间:2016-11-20 20:04:34

标签: java arrays

我需要编写的程序是由数字组成的正方形二维数组,如此

0 1 2
3 4 5
6 7 8

或者

0  1  2  3  4
5  6  7  8  9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

程序读取数字“d”(方形2d数组的一侧 - 上面是d = 3和d = 5的例子),数字“n”(接下来将有多少输入)和这些n个输入(例如,如果n = 3,程序应该让我插入三个数字,就像第一个例子一样,假设我选择1和4和3.所以输入看起来像:

3
3
1 4 2

然后,它需要计算第一和第二,第二和第三输入之间的距离并将它们相加。那个总和就是输出。这是程序

if(b==2) {
                int d=sc.nextInt();
                int n=sc.nextInt();



                int[][] array=new int[d][d]; //length and heigth of array

                int c=0;
                int manhattanDistanceSum=0;
                for (int i = 0; i < n;  i ++){ //for inserting values
                    for (int j = 0; j < n; j ++){

                        if (i < n){
                            i++;

                            array[i][j] = sc.nextInt();

                        } 
                        else {
                            break;        
                        }



                        for( i=0; i<array.length;i++) {
                            for( j=0;j<array[0].length;j++) {
                                array[i][j]=c; //actual locations of numbers
                                               //numbers in array

                                c++;

                                if(manhattanDistanceSum != 0) {
                                        int dx= c / d;
                                        int dy= c % d;


                                        c=Math.abs(dx) + Math.abs(dy);
                                        manhattanDistanceSum+=c;

                                }

                            }
                        }
                        System.out.print(array[i][j]);
                                System.out.println();
                    }
                }


                System.out.println(manhattanDistanceSum);

            }

    }
}

* b没关系,它只是意味着这将是一个方阵,所以忽略它。它与此无关。 这就是我所得到的,并且需要帮助解决我的代码中的任何错误。 三江源

1 个答案:

答案 0 :(得分:0)

我刚刚拼凑了这个例子,并测试了它与正数和负数一起工作。它可能不会完全符合您的要求(例如,您的数组中的数据是逐行还是逐行组织的)并且它可能无法按照您希望的方式精确地格式化输出,但它应该向您展示如何迭代数组并分析然后提取数据以生成可以打印出来的String

请务必进行自己的测试(为您的应用程序需要的所有情况创建单元测试),因为我已经在几分钟内将它们放在一起,希望它能帮助您入门。不能以任何方式将其视为成品。

public static void main(String[] args) {
    int[][] data = {{0, -10734, 2}, {3, 437, 5}, {6, 733838, 8}};
    System.out.println("Table:\n" + formatAsTable(data));
}

public static String formatAsTable(int[][] squareNumericArray) {
    int cellSpacing = 2;
    StringBuilder sb = new StringBuilder();
    int squareSide = squareNumericArray.length;
    int cellSize = findLargestNumericString(squareNumericArray)
            + cellSpacing;
    for (int firstIndex = 0; firstIndex < squareSide; ++firstIndex) {
        if (squareNumericArray[firstIndex].length != squareSide) {
            throw new IllegalArgumentException(
                    "Array must have same size in both dimensions.");
        }
        for (int secondIndex = 0; secondIndex < squareSide; ++secondIndex) {
            sb.append(String.format("%-" + cellSize + "d",
                    squareNumericArray[firstIndex][secondIndex]));
        }
        sb.append("\n");
    }
    return sb.toString();
}

private static int findLargestNumericString(int[][] squareNumericArray) {
    int maxLength = 0;
    for (int firstIndex = 0; firstIndex < squareNumericArray.length;
            ++firstIndex) {
        for (int secondIndex = 0; secondIndex
                < squareNumericArray[firstIndex].length; ++secondIndex) {
            String numberAsString = Integer.toString(
                    squareNumericArray[firstIndex][secondIndex]);
            if (numberAsString.length() > maxLength) {
                maxLength = numberAsString.length();
            }
        }
    }
    return maxLength;
}

此代码将以下内容输出到控制台:

Table:
0       -10734  6       
3       437     5       
6       733838  19