2013-07-31 4 views
0
int x = 0; 
String[] QEquivalent = {}; 

String s = sc.nextLine(); 
String[] question2 = s.split(" "); 

for (int i = 0; i < question2.length; i++) { 
    System.out.println(question2[i]); 
    x++; 
}                 //debug 
System.out.println(x); 

String s2 = sc2.nextLine(); 
String[] Answer = s2.split(" "); 

for (int c = 0; c < Answer.length; c++) { 
    System.out.println(Answer[c]); 
}                 //debug 
int y; 

String u = sn.nextLine(); 
String[] t = u.split(" "); 
for (y = 0; y < question2.length; y++) { 
    for (int w = 0; w < t.length; w++) { 
     if (t[w].equals(question2[y])) { 
      QEquivalent[y] = "ADJ"; 
      System.out.println(QEquivalent[y]); 
      break; 
     } 
    } 
} 

это строка кодов, которые у меня есть на данный момент. когда строка в вопросе2 найдена в String [] t, она должна хранить строку «ADJ» в String [] QEquivalent. Я не могу исправить ошибку. может кто-нибудь, пожалуйста, помогите мне?Сохранение строки в массиве вызывает ошибку ArrayIndexOutOfBoundsException

+0

Переменные в Java должны начинаться с 'lowercase'. Как 'Ответ' и' QEquivalent'. – araknoid

+1

'String []' 'QEquivalent' - пустой массив - очевидно, любая попытка доступа к своим членам по индексу приведет к' java.lang.ArrayIndexOutOfBoundsException'. –

ответ

3

Вы создаете пустой массив здесь:

String[] QEquivalent = {}; 

Таким образом, любой индекс вы пытаетесь получить доступ будет вне границ. Вы должны создать массив с фиксированным размером.

Или, вы можете лучше использовать ArrayList вместо этого, который может динамически увеличиваться в размерах:

List<String> qEquivalent = new ArrayList<String>(); 

, а затем добавить элементы с помощью:

qEquivalent.add("ADJ"); 

И, пожалуйста, следуйте Java Naming конвенции. Имена переменных должны начинаться с строчных букв.

+0

следует удалить = {}? – user2610661

+0

@ пользователь2610661. Либо вы создаете массив некоторого размера, который до сих пор неизвестен - 'String [] qEuivalent = new String [50];'. Или используйте «ArrayList», как я предлагаю. –

+0

Он отлично работает! Большое спасибо! Я только начинаю изучать java, поэтому снова спасибо за помощь! – user2610661

1

Ваш массив QEquivalent - пустой массив. Он имеет длину 0, поэтому даже QEquivalent[0] будет кидать ArrayIndexOutOfBoundsException.

Одним из способов исправить я могу видеть это присвоить ему длину:

String[] question2 = s.split(" "); 
// Just assign the dimension till which you will iterate finally 
// from your code `y < question2.length` it seems it should be question2.length 
// Note you are always indexing the array using the outer loop counter y 
// So even if there are n number of nested loops , assigning the question2.length 
// as dimension will work fine , unless there is something subtle you missed 
// in your code 
String[] QEquivalent = new String[question2.length]; 

Лучше использовать любую реализацию List, вроде ArrayList.

List<String> qEquivalent = new ArrayList<String>(); 
...... 
if (t[w].equals(question2[y])) { 
     qEquivalent.add("ADJ"); 
     System.out.println(qEquivalent.get(y)); 
     break; 
} 
0

Дайте некоторый размер в массив String[] QEquivalent = new String[100];

Вы оператор String[] QEquivalent = {}; создает массив с нулевым размером.

1

Вы создаете пустой массив:

String[] QEquivalent = {}; 

, а затем установить на индексе y > 0 некоторые элементы:

QEquivalent[y] = "ADJ"; 

Вы можете:

  • вычислить конечную размерность массива и не забудьте создать экземпляр: String[] QEquivalent = new String[SIZE];
  • использовать динамическую структуру, как ArrayList

например:

ArrayList<String> QEquivalent = new ArrayList<QEquivalent>(); 
QEquivalent.add("ADJ"); 
0

Вы объявляете QEquivalentarray как пустой Stringarray.

Когда вы обращаетесь к индексу QEquivalent[y], этот индекс не существует, следовательно, ArrayIndexOutOfBoundsException.

Я настоятельно рекомендую вам вместо этого использовать List<String>.

Такие, как:

List<String> qEquivalent = new ArrayList<String>(); // replaces the array declaration and uses Java conventional naming 

...

qEquivalent.add("ADJ"); // replaces the indexing of the array and adds the item 
0

Возможно QEquivalent переменная делает error.Because при объявлении этой переменной, ее длина 0.So объявить переменную с new и размер.

0

Или переместить его после того, как вы разбить строку в question2 и использования:

String[] QEquivalent = new String[question2.length]; 
+0

question2.length будет недостаточно. Будет добавлено больше элементов. Взгляните на цикл, который заполняет массив. Он вложен, причем внешний сам работает до 'question2.length'. –

+0

@RohitJain Но он индексирует его с помощью 'j', который является внешним счетчиком цикла! – NINCOMPOOP

+0

@RohitJain Я не согласен. Он использует цикл для (y = 0; y

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