我非常好奇加密,所以我出去给自己做了一个小任务来加密一条消息(在.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
答案 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
的值仅限于数组列长的大小,即从0
到4
。
想一想,试试这个:
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文件有行分隔符,你可以使用它们并将每个单词读成一个字符串并有一个字符串数组。
我在这里留下解释,因为我无法解决这个问题