为什么我的阵列不会打印剩余的列?

时间:2017-02-15 18:55:19

标签: java algorithm encryption

我非常好奇加密,所以我出去给自己做了一个小任务来加密一条消息(在.txt文件下面)。我没有得到我想要的输出,我只得到第一列。为什么它只打印第一列?

这是我的java文件:

import java.io.*;

public class EncryptDecrypt {

    public static void encrypt() throws IOException {
        BufferedReader in = new BufferedReader(new FileReader("cryptographyTextFile.txt"));
        String line = in.readLine();

        char[][] table = new char[5][5];

        // fill array
        for(int i = 0; i < table.length; i++) {
            for(int j = 0; j < table.length; j++) {
                table[i][j] = line.charAt(j);   
            }
        }

        // print array
        for(int i = 0; i < table.length; i++) {
            for(int j = 0; j < table.length; j++) {
                System.out.println(table[i][j]);
            }
            System.out.println();
        }
    }

    public static void main(String[] args) throws IOException {
        encrypt();
    }
}

我的.txt文件包含:

E5NOWISTHEWINTEROFOURDISCONTENT*

我的output是:

E
5
N
O
W

我希望output成为:

E I T W O O D
5 S H I F U I
N   E N   R S
O     T     C
W     E     O
      R     N
            T  
            E 
            N  
            T

2 个答案:

答案 0 :(得分:0)

那是因为你只是沿着行迭代。 在for循环中,table.length沿着行(垂直)移动,而table[0].length将沿着列迭代,即在单行(水平)上

所以你可能想把你的循环改为:

for(int i = 0; i < table.length; i++) {
    for(int j = 0; j < table[i].length; j++) {
       //your code here   
    }
}

此外,您需要为您的字符串设置单独的计数器。您j的值仅限于数组列长的大小,即从04。 想一想,试试这个:

String line = in.readLine();
int cnt = 0;
for(int i = 0; i < table.length; i++) {
  for(int j = 0; j < table[i].length; j++) {
    while(cnt<line.length()){
      table[i][j] = line.charAt(cnt);
      cnt++;
    }
  }
}

答案 1 :(得分:0)

这部分有问题

for(int i = 0; i < table.length; i++) {
            for(int j = 0; j < table.length; j++) {
                table[i][j] = line.charAt(j);   
            }
        }

您只填充从j = 0到j = 5的字符,因为您的char数组大小为5(您正在检索该行的前5个字符)。我不确定你想要实现什么,因为5X5的字符数组不是答案。

如果你的txt文件有行分隔符,你可以使用它们并将每个单词读成一个字符串并有一个字符串数组。

我在这里留下解释,因为我无法解决这个问题