Как сбросить In.read () после прохождения цикла! = '\ N' - PullRequest
0 голосов
/ 18 ноября 2018

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

char text = In.read();

Допустим, я набрал asdf

while(text != '\n' ) { 
  text = In.read();
}


//here is text = enter

, но я хочу, чтобы он снова был на «а» из asdf.

Вот чтоЯ так далеко

System.out.print("Please enter your text ");
    char text = In.read();

// some other code here
//...

for (int i = 0; i < textcount.length ; i++)
        {
            j = 0;
            while(text != '\n' )
            {

                int a = Character.getNumericValue(textcount[i]);
                int b = Character.getNumericValue(text);


                if(a == b)
                {
                    j++;
                    charCounts[i] = j;
                }
                text = In.read();
            }

        }

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Хорошо, я исправил это. Я просто изменяю его так, чтобы цикл while предшествовал циклу for. Теперь работает без перезагрузки.

0 голосов
/ 18 ноября 2018

Это зависит от того, что это за поток In.

  • Если это ByteArrayInputStream или подобное, вы можете позвонить reset(), чтобы сбросить к предыдущей "отметке"позиция.Для ByteArrayInputStream этой позицией по умолчанию является начало потока;см. javadoc .

  • Если это FileInputStream, вы можете использовать mark и reset, хотя это может зависеть от ОС испособ, которым поток был создан.(Javadoc не говорит, так или иначе.)

    В вашем случае я подозреваю, что вы будете читать из FileInputStream, который оборачивает либо канал, либо файл устройства, который не не с перемоткой.

  • Если это SocketInputStream, mark и reset вряд ли будут работать.Перемотка потоков с удаленного сервера невозможна.Протоколы сетевой передачи (и серверы) не поддерживают такие вещи.

  • Если это BufferedInputStream, mark и reset могут работать, в зависимости от размерабуфера.Прочитайте javadoc , чтобы понять взаимосвязь между размером буфера и отметкой / сбросом.


Итак, каково решение в вашем случае?

  • Пометка / сброс, вероятно, не будут работать на In.

  • Вы можете обернуть In в BufferedInputStream с достаточно большим буфером,хотя прогнозировать, насколько большим он должен быть, проблематично (по крайней мере, теоретически!)

  • Лучшее решение, вероятно, состоит в том, чтобы изменить ваш код, чтобы вам не нужно было перечитывать ввод.Например:

    • сохранить символы, которые вы читаете, в массиве,
    • использовать BufferedReader::readLine или Scanner::nextLine для чтения ввода от пользователя строки за раз.
...