2017-02-15 8 views
0

Мне очень нравится шифрование, поэтому я вышел и дал себе небольшую задачу, чтобы зашифровать сообщение (ниже в моем .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

Вы можете просто выбрать что-нибудь на лету. Вы должны написать алгоритм шифрования и decry-pt, а затем реализовать в своей логике шифрование или расшифровку текста. Какой-то разделитель, чтобы указать, что этот текст будет отображаться в первом столбце и следующем тексте в следующем столбце. Если вы хотите узнать больше об этом, вы можете обратиться к http://docs.oracle.com/javase/7/docs/technotes/guides/security/crypto/CryptoSpec.html – Maverick

+0

@ Leozeo Мне не нужно ничего необычного на данный момент. Что-то простое, чтобы прочитать этот столбец по столбцу и распечатать его, как я упоминал в своем оригинальном посте. – yabva89

ответ

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++; 
    } 
    } 
} 
+0

Хмм, я понимаю, о чем вы говорите. Я попробовал то, что вы сказали, но все, что я получаю, это результат, который я опубликовал в своем оригинальном посте только в повторном порядке, идущем вертикально. – yabva89

+0

Я просто подумал, что вам нужна помощь с петлей. Я редактировал несколько указателей. Надеюсь, это поможет. –

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 для у = 5, как ваш массив символов имеет размер 5 (вы извлечение первых 5 символов линии). Я не уверен, чего вы пытаетесь достичь, поскольку массив символов с 5X5 не является ответом.

Если ваш txt-файл имеет разделители строк, вы можете использовать их и читать каждое слово в строке и иметь массив строк.

Я оставляю объяснение здесь, поскольку я не мог решить много вопросов

 Смежные вопросы

  • Нет связанных вопросов^_^