2014-03-29 7 views
0

Привет Я читаю текстовый файл и сохраняю содержимое в массиве с аббревиатурами. Я выполнил цикл for, чтобы проверить, находится ли данная строка в массиве, и поэтому я хочу назначить следующий элемент переменной.Доступ к массиву

Вот мой код:

Scanner s = new Scanner(new File("C:\\Users\\Hass 2\\Dropbox\\work\\Java\\Assessment3\\abbreviations.txt")); 
    ArrayList<String> list = new ArrayList<String>(); 

    while (s.hasNext()) { 
     String line = s.next(); 
     String[] lineSplit = line.split(","); //split into two tokens 
     list.add(lineSplit[0]); //word 
     list.add(lineSplit[1]); //number 
} 

String [] abbreviations = list.toArray(new String[list.size()]); 
s.close(); 

System.out.println(Arrays.toString(abbreviations)); 
String test = "hello"; 
String abbreviatedWord = ""; 

     for(int i = 0; i < abbreviations.length; i++) { 

      if(test.equals(abbreviations[i])) { 
       //assign word to the abbreviated word 
       abbreviatedWord = abbreviations[i+1]; 

     } else { 
      abbreviatedWord = test; 
     } 
     } 
     System.out.println(abbreviatedWord); 
    } 

Когда я скомпилировать и запустить программу, я получаю выход как привет (которые существуют в текстовом файле), а не на следующий элемент вдоль.

Благодарим за помощь.

+0

показать некоторые из ваших результатов – redFIVE

+0

Также вы можете показать нам 3 строки в текстовом файле? – Tdorno

ответ

0

Вам необходимо разбить цикл for после поиска слова «привет».

for(int i = 0; i < abbreviations.length; i++) { 

    if(test.equals(abbreviations[i])) { 
      //assign word to the abbreviated word 
      abbreviatedWord = abbreviations[i+1]; //potential arrayoutofbound exception 
      break; 

    } else { 
     abbreviatedWord = test; 
    } 
+0

Альтернативно, как и другие, вы можете использовать hashmap. Это будет более эффективно, а также поможет избежать исключения ArrayOutOfBound. – Nikhil

0

Проблема, которую вы не возвращаете после присвоения abbreviatedWord, положил оператор return или break в состояние if.

for(int i = 0; i < abbreviations.length; i++) { 
      if(test.equals(abbreviations[i])) { 
       //assign word to the abbreviated word 
       abbreviatedWord = abbreviations[i+1]; //though this line will give you ArrayoutofBoundException 
       return ; 

     } else { 
      abbreviatedWord = test; 
     } 
     } 

Похоже, вы знаете о Collections, так что я бы предложил использовать HashMap в таком состоянии. Вот реализация одной и той же логики.

import java.io.File; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 

public class FoudnNextWord{ 
    public static void main(final String[] args) throws IOException { 
     final Scanner s = new Scanner(
       new File(
         "C:\\Users\\Hass 2\\Dropbox\\work\\Java\\Assessment3\\abbreviations.txt")); 
     final Map<String, String> list = new HashMap<String, String>(); 
     while (s.hasNext()) { 
      final String[] line = s.next().split(","); 
      list.put(line[0], line[1]); 
     } 
     final String test = "hello"; 
     if (list.containsKey(test)) { 
      System.out.println("The next word is: " + list.get(test)); 
     } else { 
      System.out.println("The next word is " + test); 
     } 
    } 
} 
0

Ваш «для (я» цикл будет проходить на всех входных элементов. Когда она проходит на «хороший» один, он устанавливает abbreviatedWord на хорошее значение, но затем он переходит на «плохих» тех, и сбрасывает abbreviatedWord испытать

Вы можете попробовать:..

String abbreviatedWord = test; 
for(int i = 0; i < abbreviations.length; i++) { 
    if(test.equals(abbreviations[i])) { 
    //assign word to the abbreviated word 
    abbreviatedWord = abbreviations[i+1]; 
    } 
} 

Вы должны также рассмотреть возможность использования HashMap, который будет гораздо более эффективным

+0

Вы также можете сломать, как было предложено Nikhil, не стоит продолжать цикл, как только вы нашли результат. –

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