2015-02-16 8 views
0

У меня возник вопрос о подписи значений в массиве. Я скопировал мой код ниже (я новичок) После компиляции и выполнения моего кода я могу увидеть только последнее значение в массиве. Зачем? Это очень простой шифрНазначение значений массиву

import java.util.Arrays; 
import java.util.Scanner; 

public class CipherManager { 

    String message; 
    int key; 
    int basic = -72; 
    int array[]; 

    public void cipher() { 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Type a text you want to cipher"); 
     message = sc.nextLine(); 
     System.out.println("Write down a number key"); 
     while (!sc.hasNextInt()) { 

      if (sc.hasNextInt()) { 
       key = sc.nextInt(); 
       sc.nextLine(); 
      } else { 
       System.out.println("Error, enter a number "); 
       sc.next(); 
      } 

     } 

     for (int i = 0; i < message.length(); i++) { 
      System.out.print(message.charAt(i)); 
      array = new int[message.length()]; 
      int litera = message.charAt(i) + key + basic; 
      array[i] = letter; 

     } 

     System.out.println(Arrays.toString(array)); 
    } 
} 
+0

Этот код не будет компилироваться ('letter' не объявлен нигде). Если он * * компилировался, у него не было бы описанного вами поведения (он бы взорвал «NullPointerException» в строке 'array [i] = letter;', поскольку вы никогда не инициализировали 'array'). –

+0

Обычно полезно, если вы приложите некоторое усилие, чтобы фактически следовать правилам форматирования, то есть отступы при отправке кода, поскольку это затрудняет понимание вашего вопроса. Также ваш код в письменном виде не имеет смысла, поскольку вы используете переменную 'tablica', которую вы никогда официально не определяете. Что касается вашей реальной проблемы, вы переназначаете массив на новый массив на каждой итерации цикла for, который уничтожает предыдущие значения, поэтому конечный массив имеет только последний набор букв – RobV

+0

Ну, вы правы, я переводил свои переменные к английскому в спешке, и я, к сожалению, пропустил несколько из них. Должен быть более осторожным в будущем – morthen

ответ

2

Я предполагаю, что текущий код не (ваш array массив не инициализируется, и так как вы не получите NullPointerException, вы, вероятно, он не используется):

  for (int i = 0; i < wiadomosc.length(); i++) { 
      System.out.print(message.charAt(i)); 
      tablica=new int[message.length()];  
      int litera = message.charAt(i)+key + basic; 
      tablica[i]=letter; 
     } 

Оно должно быть:

  tablica=new int[message.length()];  
     for (int i = 0; i < wiadomosc.length(); i++) { 
      System.out.print(message.charAt(i)); 
      int litera = message.charAt(i)+key + basic; 
      tablica[i]=letter; 
     } 

tablica массив должен быть инициализирован только один раз, перед циклом. Инициализация внутри цикла в каждой итерации делает ранее присвоенные значения (предыдущим массивам) недоступными.

+0

Большое спасибо, теперь все ясно для меня :) Это была пустая ошибка – morthen

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