该程序假设从文本文件中获取一行输入。
程序将从命令行获取2d数组的宽度,然后找到合适的高度,逐行输入字符,并逐列输出加密。
static void loadUnloadGrid(String line, int width, int height) {
char grid[][] = new char[height][width];
// Determine number long columns
int longColumn = line.length() % width;
if (longColumn == 0)
longColumn = width;
int charCount = 0;
//
System.out.println(width);
height = height;
System.out.println(height);
//
for (int c = 0; c < height; c++) {
for (int r = 0; r < width; r++) {
if (c < height - 1 || c < longColumn) {
grid[c][r] = line.charAt(charCount);
charCount += 1;
}
}
}
// Output data from the grid by rows
System.out.printf("Grid width %d: \"", width);
for (int r = 0; r < width - 1; r++) {
for (int c = 0; c < height; c++) {
System.out.print(grid[c][r]);
}
}
// Special handling for last row
for (int c = 0; c < longColumn; c++) {
System.out.print(grid[height - 1][c]);
}
}
FRIENDSROMANSCOUNTRYMENLENDMEYOUREARSICOMETOBURYCAESARNOTTOPRAISEHIM
FNOSNMEERSMBCATRERDMCTENYEIEUARTAHISAORNDOACTRENOIIERNUYLMUROOYSOPSM
FSSREOSTCNR 0000 RRCYNUIOAOA 0000 IOOMDRCBETI 0000 EMUEMEOUSTS 0000 NANNEAMRAOE 0000 0000 0000
我的输出没有打印出完整的加密;有68个原始字符,它输出55个混乱字符和一堆0混合。我是java新手,这是在学校上课,我有一些其他语言的编程经验。
答案 0 :(得分:0)
我跑了这个并得到了一个StringIndexOutOfBoundsException。我实际上不确定零是什么意思。这可能是你的IDE正在做的事情(如果你正在使用它)。你应该得到例外。
此处发生异常:
grid[c][r] = line.charAt(charCount);
你有一张支票似乎试图防范这一点,但它不起作用:
if (c < height - 1 || c < longColumn) {
我认为它应该是r < longColumn
,但由于任何数量的列都可以作为参数,因此无法完全修复它。短行不一定是height - 1
。
将检查更改为以下内容可修复异常:
if (charCount < line.length()) {
您的输出算法似乎也存在问题。基本上我收集了&#34; cipher&#34;只是一种循环反转。因此,单独输出最后一行不会起作用,因为它不会被交错。
以下似乎是正确的:
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]);
}
}
System.out.println("\"");
您可以打印整个网格,因为此时行的长度都相同。空索引只有空字符(UTF代码0),这些字符不会被显示。
这样称呼:
loadUnloadGrid("FRIENDSROMANSCOUNTRYMENLENDMEYOUREARSICOMETOBURYCAESARNOTTOPRAISEHIM", 4, 17);
输出结果为:
Grid width 4: "FNOSNMEERSMBCATRERDMCTENYEIEUARTAHISAORNDOACTRENOIIERNUYLMUROOYSOPSM"
与您的预期相同。