входная строка java и остановка при вводе 'stop' - PullRequest
0 голосов
/ 26 ноября 2010

это мой код, и у меня есть цикл do-while, который должен продолжаться, если строка «text» не введена как «stop». Однако, когда я компилирую код, он не останавливается и застревает в бесконечном цикле. Горох помоги. Спасибо.

import java.io.*;

public class input
{
    public static void main(String[] argv) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        String text = "";  
        do
        {
            System.out.println("Please enter a string: ");
            text = br.readLine(); 
            System.out.println(text);
        }
        while (text != "stop");
    }
}

Ответы [ 5 ]

2 голосов
/ 26 ноября 2010

Попробуйте заменить text != "stop" на !text.equals("stop")

!= - это тест на равенство ссылок, .equals() - это тест на логическое равенство. Две строки могут быть разными объектами и все равно быть логически равными (в данном случае одно и то же содержимое).

0 голосов
/ 26 ноября 2010

Все постеры верны: вы должны использовать String.equals ().

Также вы должны полностью понимать обработку строк в Java. Вам это понадобится везде.

Даже если использовать String.equals, Java предлагает некоторую «магию», которая работает даже при вашем сравнении. Продолжайте учиться!

public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String text = "";
        "stop".intern();
        do {
            System.out.println("Please enter a string: ");
            text = br.readLine().intern();
            System.out.println(text);
        } while (text != "stop");
    }
0 голосов
/ 26 ноября 2010

Вы не можете сравнивать строки, используя ==. Используйте equals: while(!"stop".equals(text)).

Кроме того, поскольку он поступает из пользовательского ввода, вы можете сравнить его, игнорируя регистр, вы можете использовать equalsIgnoreCase.

0 голосов
/ 26 ноября 2010

Заменить

while (text != "stop")

на

while (!text.equals("stop"))
0 голосов
/ 26 ноября 2010

Вы сравниваете строки с !=. Это не работает в Java. Вы должны использовать equals() для сравнения строк:

while (!text.equals("stop"));

Обратите внимание, что == и != на объектах сравнивают ссылки - т.е., если вы используете эти операторы для не примитивных переменных, вы проверяете, ссылаются ли переменные на один и тот же объект, и нет, если содержимое этих объектов одинаково.

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