добавить элементы в список в Java - PullRequest
0 голосов
/ 13 марта 2011

Вот код:

class Test {
    public static void main (String[] args) throws Exception {
        java.io.File fail = new java.io.File("C:/Users/Student/Desktop/Morze.txt");
        java.util.Scanner sc = new java.util.Scanner(fail);
        while (sc.hasNextLine()) {
             String line = sc.nextLine();
             String[] lst = line.split(" ");
             int[] letter = new int[26];
             int[] sumbol = new int[26];
             for (int i = 0; i < lst.length; i++)
                 System.out.print(lst[i] + " ");
             System.out.println();
                     // How to add?
        }
    }
}

Пожалуйста, объясните, как я могу добавить все буквы в список Буквы и символы в список Sumbol?

Содержимое файла Morze.txt:

A .- 
B -... 
C -.-. 
D -.. 
E . 
F ..-. 
G --. 
H .... 
I .. 
J .--- 
K -.- 
L .-.. 
M -- 
N -. 
O --- 
P .--. 
Q --.- 
R .-. 
S ... 
T - 
U ..- 
V ...- 
W .-- 
X -..- 
Y -.-- 
Z --.. 

Спасибо!

Ответы [ 4 ]

1 голос
/ 13 марта 2011

Я собираюсь предложить решение, которое исправит вашу реализацию, потому что я думаю, что это может помочь вам понять несколько концепций. Тем не менее, я бы порекомендовал, как только вы все заработаете, вернитесь, прочитайте об интерфейсе Java List и переписайте свой код. Списки - намного более чистый способ сохранения последовательностей, которые могут увеличиваться или уменьшаться в длине и значительно уменьшат сложность вашего кода.

Вы должны начать с перемещения объявлений букв и массивов из цикла while. Переменные внутри блока в Java ограничены его границами. Другими словами, ни один оператор вне цикла while не может видеть ни один массив. У этого есть побочный эффект создания нового массива для каждой строки, которую вы анализируете с помощью сканера.

    int[] letter = new int[26];
    int[] sumbol = new int[26];
    while (sc.hasNextLine()) {
         String line = sc.nextLine();
         String[] lst = line.split(" ");

Далее вам нужно знать, куда поместить текущий символ / букву в массив, индекс. Таким образом, вы захотите сохранить количество обработанных вами строк / символов.

    int[] letter = new int[26];
    int[] sumbol = new int[26];
    int numberOfSymbolsProcessed = 0;
    while (sc.hasNextLine()) {
         String line = sc.nextLine();
         String[] lst = line.split(" ");

Теперь у вас есть два массива и индекс в каждом, добавьте символ и букву в массив следующим образом ...

    int[] letter = new int[26];
    int[] sumbol = new int[26];
    int numberOfSymbolsProcessed = 0;
    while (sc.hasNextLine()) {
         String line = sc.nextLine();
         String[] lst = line.split(" ");
         letter[numberOfSymbolsProcessed] = lst[0];
         sumbol[numberOfSymbolsProcessed] = lst[1];
         numberOfSymbolsProcessed = numberOfSymbolsProcessed + 1;
1 голос
/ 13 марта 2011

У вас нет списка, у вас есть массив (ы).Похоже, вы хотите добавить значения в два массива.Однако у вас, похоже, есть некоторый код в вашем цикле, который не должен быть в вашем цикле.

Кроме того, ваши данные - это текст / строка, а не числа / значения типа.

String[] letter = new String[26];
String[] symbol = new String[26];
int count = 0;
while (sc.hasNextLine()) {
    String line = sc.nextLine();
    String[] lst = line.split(" ");
    letter[count] = lst[0];
    symbol[count] = lst[1];
    count++;
}
for (int i = 0; i < count; i++)
    System.out.println(letter[i] + " " + symbol[i]);
0 голосов
/ 13 марта 2011

Если вы знаете, что ваш файл будет содержать буквы или символы, тогда вы можете использовать класс Pattern и использовать регулярное выражение, например

^[a-z][A-Z]+$

, чтобы проверить, является ли данная строка в вашем случае lst [i] одной или несколькими буквами. ^ в начале и $ в конце гарантируют, что в строке есть только буквы.

Если строка соответствует шаблону, то вы знаете, что это буква, поэтому вы можете добавить ее в список букв. Если это не так, вы можете добавить его в структуру данных символа.

Я рекомендую не использовать массивы, а динамические структуры данных, такие как ArrayList , для ваших списков, поскольку они будут расти динамически по мере добавления в него элементов.

Для получения дополнительной информации о классе шаблона вы можете проверить этот учебник

0 голосов
/ 13 марта 2011

Это был бы отличный вариант использования интерфейса List.

   List<String> list = new LinkedList<String>();

   while (sc.hasNextLine()) {
         String line = sc.nextLine();
         list.addAll(Arrays.asList(line.split(" ")));
   }
...