当我只输入数字时,数组输出0000

时间:2014-02-03 19:48:21

标签: java arrays

该程序假设从文本文件中获取一行输入。

程序将从命令行获取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新手,这是在学校上课,我有一些其他语言的编程经验。

1 个答案:

答案 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"

与您的预期相同。