Contar Numeros introducidos en un Scanner

Quiero hacer un programa en Java que lea una línea de la entrada standard utilizando la clase Scanner.

El usuario escribirá una línea con números separados por espacios; por ejemplo :

3 10 0 13 4

El programa debe contar cuántos números han sido introducidos en la línea. Y procesar esos números en un bucle para imprimir cuales son pares y cuales impares.

La salida para el ejemplo anterior sería :

3 es IMPAR
10 es PAR
0 es PAR
13 es IMPAR
4 es PAR
SE VERIFICO  : 5  NÚMEROS

He probado a leer los números con el siguiente programa pero el problema es que no se sale del bucle while cuando el usuario pulsa INTRO para indicar fin de línea. Este es el programa que no funciona :

public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  int numerosLeidos = 0;
  while (scanner.hasNext()) {
    int numero = scanner.nextInt();
    System.out.println("Se ha introducido el numero : " + numero);
    ++numero;
  }
  System.out.println("Se han leido : " + numerosLeidos ); // Nunca se llega a esta linea
}
2
задан 13.09.2016, 22:35
3 ответа

Я нашел решение! и из-за меня самого!

Scanner scanner = new Scanner(System.in);
int input=1;
String inputtexto= "0";
int cont=0;

inputtexto = scanner.nextLine(); 
String[] numberstexto = inputtexto.split(" ");
cont=numberstexto.length;
int numbers [] = new int [cont];

for(int o=0;o<cont;o++){
    numbers [o] = Integer.parseInt(numberstexto[o]);
    System.out.println(numbers [o]);
}

for(int i=0;i<cont;i++){
    if((numbers[i])%2 ==0)System.out.println(numbers[i]+" es PAR" );
    else System.out.println(numbers[i]+" es IMPAR");
}

System.out.println("SE VERIFICO  : " +cont +"  NÚMEROS");
3
ответ дан 24.11.2019, 13:25
  • 1
    Он собирался издавать мой ответ, чтобы помещать soluci и # 243; n tambi и # 233; n основанная на String.split, но я вижу, что у тебя была та же идея, очень довольно сделано. Одна согрешила и # 241; в прогресс быть и # 237; чтобы использовать "\s+" в split вместо " ", схвати и # 237; программа функционирует, хотя будет м и # 225; s места между ними n и # 250; морские окуни. +1 для тебя; и не забывай о том, что ты можешь принимать твой собственный ответ. – Jose Antonio Reinstate Monica 13.09.2016, 22:23
  • 2
    Хорошо, что ты находишь soluci и # 243; n t и # 250; сам, хотя мой ответ делает то же самое:) – Dev. Joel 13.09.2016, 22:45
        int cont=0; //si desea contar cuantos numeros ingreso 
       Scanner scanner = new Scanner(System.in);

       while(scanner.hasNextInt()) {//solicita una nueva entrada
          int val  =scanner.nextInt(); 
          if(val%2 ==0)System.out.println(val+" PAR" );
          else System.out.println(val+ " IMPAR");
          cont++;
       }
    System.out.println("SE VERIFICO  : " +cont +"  NÚMEROS");
1
ответ дан 24.11.2019, 13:25
  • 1
    Привет @DevJoel. Спасибо за способствование. Quiz и # 225; s convendr и # 237; когда один добавил, согрешите и # 241; или комментарий на c и # 243; mo c и # 243; я говорю, что он отвечает на вопрос, чтобы благодетельствовать будущему лекторату. – Mariano 13.09.2016, 19:46
  • 2
    Спасибо, проблема состоит в том, что программа заканчивает, потому что я пишу exit, я nesecito, что я закончился автоматически после, что уже нет больше scanner.hasNext – Jaime Saiag 13.09.2016, 19:50
  • 3
    Тогда tendr и # 237; которому единственная цепь читать с поступающими данными, отделенными местом например 12 15 16, если он не хочет использовать место podr и # 237; чтобы использовать delimitadores – Dev. Joel 13.09.2016, 20:35

Ты не должен делать ничто в твоем коде Java для того, чтобы Scanner.hasNext() ему удайтесь иметь стоимость false.

Просто должен писать EOF (Энд Оф File = Конец Файла) и Scanner.hasNext() он возвратит false.

В Linux, если ты выполняешь с консоли способ писать EOF, он нажимая CTRL+D

Доказательство эта программа:

import java.util.Scanner;
public class ScannerFin {
  public static void main(String[] args) {
    Scanner scanner = new Scanner( System.in );
    while ( scanner.hasNext() ) {
      String cadena = scanner.nextLine();
      System.out.println("Cadena leida = " + cadena);
    }
    System.out.println("Fin del programa");
  }
}

Составь это, выполни это, напиши линии и нажми CTRL+D:

jose2@HP-Negro:~ $ javac ScannerFin.java
jose2@HP-Negro:~ $ java ScannerFin
здравствуйте!
Начитанная цепь = привет
двадцать семь
Начитанная цепь = двадцать семь

Здесь я нажимаю CTRL+D

Конец программы
jose2@HP-Negro:~ $

-1
ответ дан 24.11.2019, 13:25
  • 1
    то, что я хочу сделать: спрашивать несколько чисел у пользователя, потом говорить ему, который является непарой и какова пара, и я хочу, что pueda помещать бесконечность чисел (без того, чтобы termine программа как случай, который ты поместил мне) – Jaime Saiag 13.09.2016, 01:44
  • 2
    Просвет, что s и # 237;. Используй переменную, инициализировавшую в 0 и increm и # 233; ntala каждый раз, когда вмешивается один n и # 250; морской окунь. – Jose Antonio Reinstate Monica 13.09.2016, 01:45
  • 3
    издайте комментарий – Jaime Saiag 13.09.2016, 01:47
  • 4
    как я это делаю?, я не могу знать все числа он вошел в scanner – Jaime Saiag 13.09.2016, 01:48
  • 5
    Давайте предполагать, что пользователь вводит 7 n и # 250; морские окуни. и #191; Цюй и # 233; ты хочешь, чтобы он сделал программу, прочитав эти 7 n и # 250; морские окуни?-----я предлагаю Тебе пробовать программу, сходную с программой этого вопроса, но с nextInt вместо nextLine. И поскольку комментарии не для распространенных чатов, использует этот чат , он ах и # 237; где следовать за тобой, и # 233; отвечая, не из-за комментариев. – Jose Antonio Reinstate Monica 13.09.2016, 01:55