Cómo leer un valor entero de la entrada estándar en Java

109

¿Qué clase puedo usar para leer una variable entera en Java?

Nehil Verma
fuente

Respuestas:

141

Puede utilizar java.util.Scanner( API ):

import java.util.Scanner;

//...

Scanner in = new Scanner(System.in);
int num = in.nextInt();

También puede tokenizar la entrada con expresiones regulares, etc. La API tiene ejemplos y hay muchos otros en este sitio (por ejemplo, ¿Cómo evito que un escáner arroje excepciones cuando se ingresa el tipo incorrecto? ).

poligenelubricantes
fuente
1
Estoy tratando de ejecutarlo en mi ID de eclipse sin error de sintaxis, pero no muestra nada en la salida de la consola cuando intento generar los valores enteros leídos. ¿Por qué esto es tan?
rh979
@polygenelubricants: in.nextInt () solo acepta un valor int, no un valor entero
Ved Prakash
31

Si está utilizando Java 6, puede utilizar el siguiente delineador para leer un número entero desde la consola:

int n = Integer.parseInt(System.console().readLine());
desaparecido faktor
fuente
17
Me gustaría comentar que en la mayoría de los IDEs System.console devolverá nulo cuando la aplicación se invoca a través de un lanzador, lo que dificulta la depuración. Esto parece ser cierto para IDEA, Eclipse y NetBeans.
Andrew White
1
Si ingresa una cadena o 'Enter', arrojará una NumberFormatException. Así que es mejor controlar la cadena antes de analizarla en Integer
Vasile Surdu
¿Qué pasa si hay más de un número entero en esa línea separados por espacio?
LostMohican
@LostMohican, hay formas de leer tokens delimitados por espacios en blanco usando Scanner.
missingfaktor
17

Aquí proporciono 2 ejemplos para leer el valor entero de la entrada estándar

Ejemplo 1

import java.util.Scanner;
public class Maxof2
{ 
  public static void main(String args[])
  {
       //taking value as command line argument.
        Scanner in = new Scanner(System.in); 
       System.out.printf("Enter i Value:  ");
       int i = in.nextInt();
       System.out.printf("Enter j Value:  ");
       int j = in.nextInt();
       if(i > j)
           System.out.println(i+"i is greater than "+j);
       else
           System.out.println(j+" is greater than "+i);
   }
 }

Ejemplo 2

public class ReadandWritewhateveryoutype
{ 
  public static void main(String args[]) throws java.lang.Exception
  {
System.out.printf("This Program is used to Read and Write what ever you type \nType  quit  to Exit at any Moment\n\n");
    java.io.BufferedReader r = new java.io.BufferedReader (new java.io.InputStreamReader (System.in));
     String hi;
     while (!(hi=r.readLine()).startsWith("quit"))System.out.printf("\nYou have typed: %s \n",hi);
     }
 }

Prefiero el primer ejemplo, es fácil y bastante comprensible.
Puede compilar y ejecutar los programas JAVA en línea en este sitio web: http://ideone.com

Srivastav
fuente
1
ex 2 podría no ser la mejor manera de presentar el flujo de entrada ... o supongo que los "Objetos de entrada del sistema" a alguien nuevo en OOD, Java o codificación para el caso, todo ese código descriptivo y usted nombra el objeto clave " r ".... un sabio, ¿eh? xD +1
Tapper7
1
El ejemplo 1 no está protegido contra entradas de formato falso
Martin Meeser
11

Revisa este:

public static void main(String[] args) {
    String input = null;
    int number = 0;
    try {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        input = bufferedReader.readLine();
        number = Integer.parseInt(input);
    } catch (NumberFormatException ex) {
       System.out.println("Not a number !");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
el perdido
fuente
¿De qué sirve capturar NumberFormatExceptiony luego imprimir el seguimiento de la pila?
missingfaktor
6

La segunda respuesta anterior es la más simple.

int n = Integer.parseInt(System.console().readLine());

La pregunta es "Cómo leer desde la entrada estándar".

Una consola es un dispositivo asociado típicamente al teclado y la pantalla desde el cual se inicia un programa.

Es posible que desee probar si no hay ningún dispositivo de consola Java disponible, por ejemplo, Java VM no se inició desde una línea de comandos o si se redirigen los flujos de entrada y salida estándar.

Console cons;
if ((cons = System.console()) == null) {
    System.err.println("Unable to obtain console");
    ...
}

Usar la consola es una forma sencilla de ingresar números. Combinado con parseInt () / Double () etc.

s = cons.readLine("Enter a int: ");
int i = Integer.parseInt(s);    

s = cons.readLine("Enter a double: ");
double d = Double.parseDouble(s);
Najib Tounsi
fuente
2
-1 por no responder la pregunta. No quiere leer desde una consola, sino desde una entrada estándar.
Ingo
La pregunta dice claramente que no quiere leer desde la consola. de todos modos gracias por darnos información sobre cómo leer desde la consola.
Srivastav
4

revisa este:

import java.io.*;
public class UserInputInteger
{
        public static void main(String args[])throws IOException
        {
        InputStreamReader read = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(read);
        int number;
                System.out.println("Enter the number");
                number = Integer.parseInt(in.readLine());
    }
}
Madhav
fuente
3

Esto causa dolores de cabeza, así que actualicé una solución que se ejecutará utilizando las herramientas de hardware y software más comunes disponibles para los usuarios en diciembre de 2014. Tenga en cuenta que JDK / SDK / JRE / Netbeans y sus clases posteriores, compiladores de bibliotecas de plantillas, editores y depuradores son gratis.

Este programa fue probado con Java v8 u25. Fue escrito y construido usando
Netbeans IDE 8.0.2, JDK 1.8, el sistema operativo es win8.1 (disculpas) y el navegador es Chrome (doble disculpa), destinado a ayudar al trato de UNIX-cmd-line OG con la GUI moderna basada en la web IDE a COSTE CERO, porque la información (y los IDE) siempre deben ser gratuitos. Por Tapper7. Para todo el mundo.

bloque de código:

    package modchk; //Netbeans requirement.
    import java.util.Scanner;
    //import java.io.*; is not needed Netbeans automatically includes it.           
    public class Modchk {
        public static void main(String[] args){
            int input1;
            int input2;

            //Explicity define the purpose of the .exe to user:
            System.out.println("Modchk by Tapper7. Tests IOStream and basic bool modulo fxn.\n"
            + "Commented and coded for C/C++ programmers new to Java\n");

            //create an object that reads integers:
            Scanner Cin = new Scanner(System.in); 

            //the following will throw() if you don't do you what it tells you or if 
            //int entered == ArrayIndex-out-of-bounds for your system. +-~2.1e9
            System.out.println("Enter an integer wiseguy: ");
            input1 = Cin.nextInt(); //this command emulates "cin >> input1;"

            //I test like Ernie Banks played hardball: "Let's play two!"
            System.out.println("Enter another integer...anyday now: ");
            input2 = Cin.nextInt(); 

            //debug the scanner and istream:
            System.out.println("the 1st N entered by the user was " + input1);
            System.out.println("the 2nd N entered by the user was " + input2);

            //"do maths" on vars to make sure they are of use to me:
            System.out.println("modchk for " + input1);
            if(2 % input1 == 0){
                System.out.print(input1 + " is even\n"); //<---same output effect as *.println
                }else{
                System.out.println(input1 + " is odd");
            }//endif input1

            //one mo' 'gain (as in istream dbg chk above)
            System.out.println("modchk for " + input2);
            if(2 % input2 == 0){
                System.out.print(input2 + " is even\n");
                }else{
                System.out.println(input2 + " is odd");
            }//endif input2
        }//end main
    }//end Modchk
Tapper7
fuente