Как добавить пользовательский ввод в ArrayList, пока ключевое слово не вызовет его остановку?

1

Поэтому я пытаюсь написать программу Java, которая позволяет пользователю вводить слова в командной строке. Программа должна прекратить принимать слова, когда пользователь вводит "STOP". Храните слова в ArrayList. Слово STOP не должно храниться в списке.

Затем напечатайте размер списка, а затем содержимое списка.

Затем удалите первое и последнее слова, хранящиеся в списке, но только если длина списка больше двух. Наконец, перепечатайте содержимое списка.

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class t2_lesson1_template {

    public static void main (String str[]) throws IOException
    {
        ArrayList<String> list  = new ArrayList<String>();

        Scanner scan = new Scanner(System.in);  


        do 
        {
            System.out.println("What would you like to add to the list?"); 
            String input = scan.nextLine();
            list.add(input);
        }

        while( scan.nextLine() != "STOP");


       if ( list.size() < 2)
       {
        System.out.println(list);
        System.out.println(list.size());
       }
       else
       {
        list.remove(0);
        list.remove(list.size()-1);
        System.out.println(list);
        System.out.println(list.size());
       }
   }

}

Он продолжает задавать вопрос, но никогда не распознает, что вход "STOP". Если кто-то может помочь мне разобраться в том, что случилось, это очень поможет. Спасибо!

  • 0
    не сравнивайте строки, используя ==. Используйте равных
  • 0
    Возможный дубликат Как сравнить строки в Java?
Теги:
arraylist
java.util.scanner

3 ответа

1
Лучший ответ

В очереди:

scan.nextLine() != "STOP"

вы сравниваете ссылки на два объекта. Если вам нужно сравнить объекты, вы должны использовать метод equals() объекта Object.

Читайте о equals() в документации.

Но в вашем коде есть еще одна проблема. Вы читаете следующую строку дважды. В цикле и в while (...).

Попробуй это:

System.out.println("What would you like to add to the list?");
String input = scan.nextLine();
while(!input.equals("STOP"))
{
    list.add(input);
    input = scan.nextLine();
}
  • 0
    Ааа, это объясняет, почему все было испорчено; Спасибо за понимание!
2

Измените scan.nextLine() != "STOP" до while(!scan.nextLine().equalsIgnoreCase("stop")); и попробовать.

Причина:

Строковый литерал "STOP" не будет таким же, как значение String "STOP" введенное с клавиатуры (в вашем случае). == сравнивает ссылки. Вы должны проверить значение 2 строки, а не ссылки.

  • 0
    Спасибо, похоже, это работает, однако ближе к концу, когда я пытаюсь распечатать ArrayList, он печатает только элемент в середине ArrayList. Есть ли у вас какие-либо понятия о том, почему это происходит? Неважно, комментарий ниже объяснил, что я делал не так. Однако, спасибо!
1

Попробуйте приведенный ниже код:

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class t2_lesson1_template {

  public static void main(String str[]) throws IOException {
    ArrayList<String> list = new ArrayList<String>();

    Scanner scan = new Scanner(System.in);

    System.out.println("What would you like to add to the list?");
    String input = scan.nextLine();

    while (!input.equals("STOP")) { // compare string using equals(Object o) method
      list.add(input);

      System.out.println("What would you like to add to the list?");
      input = scan.nextLine();
    }

    System.out.println("Size of list = " + list.size());

    System.out.println("Input list:-\n" + list);

    if (list.size() > 2) {
      list.remove(0);
      list.remove(list.size() - 1);

      System.out.println("List after removing first and last eliment:-\n" + list);
    }
  }

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню