2010-03-24 59 views

Respuesta

9

comprobar éste:

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(); 
    } 
} 
+0

Cuál es el punto de agarrar la 'NumberFormatException' y luego imprimir el seguimiento de la pila? – missingfaktor

+0

Sí, ¡absolutamente sin sentido! :-) ¡Simplemente lo cambié, gracias! – thelost

121

Puede utilizar java.util.Scanner (API):

import java.util.Scanner; 

//... 

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

También puede tokenize de entrada con expresiones regulares, etc. La API tiene ejemplos y hay muchos otros en este sitio (por ejemplo, How do I keep a scanner from throwing exceptions when the wrong type is entered?).

+5

En segundo lugar esa solución. –

+1

Estoy intentando ejecutarlo en mi ID de eclipse sin error de sintaxis, pero no muestra nada en la salida de la consola cuando trato de mostrar los valores enteros de lectura. ¿Por qué esto es tan? –

29

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

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

Me gustaría comentar que en la mayoría de los IDE, System.console devolverá nulo cuando la aplicación se invoque a través de un iniciador por lo que es difícil de depurar. Esto parece ser cierto para IDEA, Eclipse y NetBeans. –

+1

Si ingresa una cadena o 'Enter' lanzará una NumberFormatException. Por lo tanto, es mejor controlar la cadena antes de analizarla en Integer –

+0

¿qué ocurre si hay más de un entero en esa línea separado por espacio? – LostMohican

16

Aquí estoy proporcionando 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

+0

ex 2 podría no ser la mejor manera de introducir la corriente de entrada ... o supongo que los "Objetos de entrada del sistema" a alguien nuevo en OOD, Java o codificación, ya que todo ese código descriptivo y el nombre del objeto clave "r" ... un sabio, ¿eh? xD +1 – Tapper7

+0

El ejemplo 1 no está protegido contra entradas de formato falso –

4

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 típicamente asociado al teclado y la pantalla desde la que se inicia un programa.

Es posible que desee comprobar si no hay ningún dispositivo de consola Java disponible, p. Java VM no se inicia desde una línea de comandos o las secuencias de entrada y salida estándar se redirigen.

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()/Doble(), etc.

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

s = cons.readLine("Enter a double: "); 
double d = Double.parseDouble(s); 
+1

-1 por no responder la pregunta. No quiere leer desde una consola, sino desde la entrada estándar. – Ingo

+0

La pregunta indica claramente que no quiere leer desde la consola. de todos modos, gracias por darnos algo de información sobre cómo leer desde la consola. –

2

comprobar éste:

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()); 
    } 
} 
3

Esto provoca dolores de cabeza por lo que he actualizado una solución que se ejecutará utilizando el hardware más común y herramientas de software disponibles para usuarios en diciembre de 2014. Tenga en cuenta que el JDK/SDK/JRE/Netbeans y sus clases subsiguientes, compiladores de bibliotecas de plantillas, editores y depuradores son gratuitos.

Este programa se probó con Java v8 u25. Fue escrito y construido usando
Netbeans IDE 8.0.2, JDK 1.8, OS es win8.1 (disculpas) y el navegador es Chrome (disculpas) - destinado a ayudar a UNIX-cmd-line OG's con la interfaz gráfica de usuario moderna- IDE basados ​​en web a COSTO 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 
Cuestiones relacionadas