останавливать циклы с условием hasNext()

(Scanner Input=new Scanner(System.in))

В моей программе есть цикл while с условием Input.hasNext(). Я хочу прочитать строку со сканером без Input.nextLine();, потому что я хочу использовать строки и целые числа в этой строке с .next() и .nextInt(), как я могу разорвать цикл while после прочтения одной строки или как я могу разорвать цикл while вводом новой строки персонаж?

while (Input.hasNext()) {
    if (Input.hasNextFloat()) {
      Grade=Input.nextFloat();
      P.setGrades(Grade);
      j=0;k=1;
      continue;
    }
    if (k==1) {
      P.getGPA();
      P=new Person();
      k=0;
    }
    if (j==1) {
      P.setLastName(Input.next());
      continue;
    }
    P.setFirstName(Input.next());
    i++;
    j=1;
} 

person wilson daffing    schedule 13.11.2011    source источник


Ответы (4)


если вы хотите прочитать только 1 строку в 1 строке, а затем проанализировать строку

String line = Input.nextLine();
Scanner lineScanner = new Scanner(line);//Scanner can also work on a String instead of a InputStream
while(lineScanner .hasNext()){
    if(lineScanner .hasNextFloat()){
      Grade=lineScanner .nextFloat();
      P.setGrades(Grade);
      j=0;k=1;
      continue;}
    if(k==1){
      P.getGPA();
      P=new Person();
      k=0;}
    if(j==1){
      P.setLastName(lineScanner .next());
      continue;}
    P.setFirstName(lineScanner .next());
    i++;
    j=1;
} 
person ratchet freak    schedule 13.11.2011

Как насчет этого?

boolean b=true;
while (Input.hasNext() && b) {
    if (Input.hasNextFloat()) {
      Grade=Input.nextFloat();
      P.setGrades(Grade);
      j=0;k=1;
    } else {
        String content=Input.next();
        if (content.equals("")) {
            b=false;
        } else {
            if (k==1) {
              P.getGPA();
              P=new Person();
              k=0;
            }
            if (j==1) {
              P.setLastName(content);
              continue;
            }
            P.setFirstName(content);
            i++;
            j=1;
        }
    }
} 

Я действительно не привык к классу Scanner, но я предполагаю, что next() возвращает пустую строку, если введена новая строка.

person Alexis Dufrenoy    schedule 13.11.2011

Проверьте условия, которые вы хотите, и используйте break для завершения цикла.

РЕДАКТИРОВАТЬ:

Основываясь на вашем комментарии, я бы сказал, что вы не можете использовать Scanner в циклическом тесте. Он просто пропускает новые строки как пробел и ждет чего-то еще. Вместо этого оберните System.in в BufferedReader и используйте readLine для получения следующей пользовательской строки. Если строка пуста (нулевая длина), то можно выйти из цикла; в противном случае вы можете поместить строку в сканер, чтобы использовать методы синтаксического анализа сканера для этой строки.

person Ted Hopp    schedule 13.11.2011
comment
это зависит от пользователя, я не могу использовать break. Я хочу сделать ложное условие Input.hasNext() с вводом символа новой строки - person wilson daffing; 13.11.2011

если вы хотите выйти из while, поставьте return; или если вы хотите перейти к следующей итерации цикла, нажмите continue;

person kakashy    schedule 13.11.2011