Java-программа застряла после цикла "for" - PullRequest
0 голосов
/ 26 августа 2018

Моя Java-программа застревает после for-loop.Он не застрял в цикле, но программа просто по какой-то причине не хочет идти дальше.Однако он успешно завершает цикл:

public static void main(String[] args){
    String[] command = new String[20];
    Scanner a = new Scanner(System.in);
    for (int i = 0; a.hasNext(); i++) {
        command[i] = a.next();
        System.out.println(i);
    }
    a.close();
    System.out.println("asd");
}

Эта программа выводит "0", если вы ввели 1 слово, "0 1", если 2, и так далее, но System.out.println("asd") никогда не выполняется, а также,программа никогда не останавливается.

Ответы [ 4 ]

0 голосов
/ 26 августа 2018

Проблема была вызвана тем, что программа снова ждала вашего ввода, она никогда не зависала. Кроме того, ваш код завершится с исключением (ArrayOutOfBoundException) только после того, как будет превышен размер массива, т. Е. Пользователь ввел более 20 токенов.

Если вы хотите захватить каждое слово в индексе массива, используйте

String[] command = a.split(" ");

, что даже позволит избежать цикла for, который вызвал ненужную путаницу.

0 голосов
/ 26 августа 2018

Программа никогда не завершается, потому что System.in никогда не закрывается, поэтому hasNext() всегда будет истинным, а цикл никогда не закончится.

Вместо этого вы можете попросить пользователя ввести определенный символ для выхода изпрограмма.

public static void main(String[] args) {
        String[] command = new String[20];
        Scanner a = new Scanner(System.in);
        for (int i = 0; a.hasNext(); i++) {
            command[i] = a.next();
            System.out.println(i);
            System.out.println("Do you want to continue? y/n");
            if(a.next().equals("n")){
                break;
            }
        }
        a.close();
        System.out.println("asd");
    }
0 голосов
/ 26 августа 2018

проверить состояние выхода для цикла

!a.next().equals("n")

//

public static void main(String args[])

     {

        String[] command = new String[20];
        Scanner a = new Scanner(System.in);
        for (int i = 0; a.hasNext() && !a.next().equals("n"); i++) {
            command[i] = a.next();
            System.out.println(i);
            System.out.println("Do you want to continue? y/n");

        }
        a.close();       

     }
0 голосов
/ 26 августа 2018

Добро пожаловать в StackOverflow :)

Выполнение for-loop никогда не заканчивается, потому что a.hasNext() всегда true.Так что цикл никогда не соответствует условию завершения.По этой причине вы должны использовать break в какой-то момент (входной сигнал - например. "EXIT"), чтобы выйти из бесконечного цикла или установить максимально допустимое значение i - разве вы не имели в виду command.length для заполнения массива?со значениями?

for (int i = 0; i < command.length; i++) {
    command[i] = a.next();
    System.out.println(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...