2014-10-21 2 views
0
int i=0; 
String x[]= new String[i]; 
while(true){ 
    if(x[i]!="stop") { 
     x[i]=in.nextLine(); 
     i++; 
     return; 
    } 
} 

Я хочу, чтобы пользователь вводил текст, чтобы ввести текст, ввести другой текст и нажать Enter и т. Д., Пока пользователь не наберет «остановить». Затем я хочу, чтобы массив x[i] содержал все различные входы, которые будут храниться в качестве его элементов.Как вводить строки в массив до тех пор, пока строка ввода не будет соответствовать критериям?

NetBeans продолжают посылать

Исключение в потоке "основного" java.lang.ArrayIndexOutOfBoundsException: 0 в app.App.main (App.java:46)

Как я могу это исправить ?

+2

В Java вы не можете сравнивать строки, используя '==' и '' = операторы, вы должны использовать 'равных (...) 'метод. – Titus

+1

Ошибка в том, что она говорит: когда вы создаете 'x',' i' держит '0'. Если вы хотите динамически изменять размер массива, используйте 'ArrayList', или в этой ситуации, вероятно,' LinkedList'. – Floegipoky

ответ

1

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

Scanner in = new Scanner(System.in); 
    ArrayList<String> list = new ArrayList<String>(); 
    String line; 
    while (!(line = in.nextLine()).equals("stop")) { 
     list.add(line); 
    } 
    in.close(); 
    System.out.println(list); 
0

Вы инициализировали массив размером 0 (это то, что я начинаю как). Поэтому x [i] не существует, когда вы начинаете проходить цикл.

Я рекомендую использовать ArrayList, как описано в этом вопросе: How to add new elements to an array?

x[i]!="stop" 

Также не будет оценивать справедливо, когда пользователь вводит прекратиться, так как он сравнивает ссылки на объект, а не содержание строка.

Смотрите эту статью на сравнение строк в Java: http://docs.oracle.com/javase/tutorial/i18n/text/collationintro.html

1

Вы ArrayIndexOutOfBoundsException из этой линии:

String x[]= new String [i]; // here i = 0 

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


Используйте ArrayList<String> вместо этого массива:

public static void main(String[] args) { 

    ArrayList<String> x = new ArrayList<String>(); 

    String line = ""; 
    Scanner in = new Scanner(System.in); 

    while(true){ 
     line = in.nextLine(); 
     if ("stop".equals(line)) { 
      break; 
     } 
     x.add(line); 
    } 
    in.close(); 

    System.out.println(x); // print the result 
} 

или с использованием примерочных с-ресурсы из Java 7:

ArrayList<String> x = new ArrayList<String>(); 

    try(Scanner in = new Scanner(System.in)) { 
     String line = ""; 
     while(true){ 
      line = in.nextLine(); 
      if ("stop".equals(line)) { 
       break; 
      } 
      x.add(line); 
     } 
    }