从2D阵列打印时删除字符

时间:2016-02-01 07:43:35

标签: java arrays

我有一个字符串,我想通过按行加载到2D数组然后按列打印数据来加密。这样:

| A | B |

| C | d |

| E |

加密到“ACEBD”。

但是我似乎无法避免在输出的最后一行中删除“ACBD”中的字符。知道如何解决这个问题吗?

public static void main(String[] args) throws FileNotFoundException {
    if (handleArguments(args))
        System.out.println("encrypt");


    // get input
    Scanner input = new Scanner(inputFile);
    String line = input.nextLine();
    // calculate height of the array
    int height = line.length() / width;
    // Add one to height if there's a partial last row
    if (line.length() % width != 0)
        height += 1;

    loadUnloadGrid(line, width, height);
}
static void loadUnloadGrid(String line, int width, int height) {
    // make an empty array
    char grid[][] = new char[height][width];

    // fill the array row by row with character from line

    int charCount = 0;
    for (int r = 0; r < height - 1; r++) {
        for (int c = 0; c < width; c++) {
            // check to make sure accessing past end of the line
            if (charCount < line.length()) {
                grid[r][c] = line.charAt(charCount);
                charCount++;

            }
        }
    }

    // print to standard output the characters in array
    System.out.printf("Grid width %d: \"", width);
    for (int r = 0; r < width; r++) {
        for (int c = 0; c < height; c++) {
            System.out.print(grid[c][r]);
        }
    }
    // !!Special handling for last row!!
    int longColumn = line.length() % width;
    if (longColumn == 0)
        longColumn = width;

    for (int c = 0; c < longColumn; c++) {
        System.out.print(grid[height - 1][c]);
    }
    System.out.println();



}

1 个答案:

答案 0 :(得分:0)

您需要在循环列之前循环行,即,就像您通常不这样做的那样。

for (int i = 0; i < array[0].length; i++) {
    for (int j = 0; j < array.length; j++) {
         // prints columns before rows
    }
}

但是,请注意,您无法检查循环中一行的列数是否少于另一行。通常array[i].length可以避免任何NPE。在这种情况下,您可能需要定义检查行j处的数组是否具有列i。这可以通过检查:

在第二个循环中完成
if (array[j].length > i)
    // System.out.println(...);
else
    break;

编辑:我看到你的循环应该正常工作。最有可能height只是1而不是2,因此,最后一行会被切断。我的代码适用于您的输入,您的循环应该以相同的方式工作。尝试打印height并检查它是否正确或调试您的程序并逐步完成。