Comment lire une valeur entière à partir de l'entrée standard en Java

109

Quelle classe puis-je utiliser pour lire une variable entière en Java?

Nehil Verma
la source

Réponses:

141

Vous pouvez utiliser java.util.Scanner( API ):

import java.util.Scanner;

//...

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

Il peut également tokeniser l'entrée avec une expression régulière, etc. L'API a des exemples et il y en a beaucoup d'autres sur ce site (par exemple, comment empêcher un scanner de lancer des exceptions lorsque le mauvais type est entré? ).

lubrifiants polygènes
la source
1
J'essaie de l'exécuter dans mon identifiant d'éclipse sans erreur de syntaxe, mais il ne montre rien dans la sortie de la console lorsque j'essaye de sortir les valeurs entières lues. Pourquoi cela est-il ainsi?
rh979
@polygenelubricants: in.nextInt () n'accepte que la valeur int et non une valeur Integer
Ved Prakash
32

Si vous utilisez Java 6, vous pouvez utiliser le oneliner suivant pour lire un entier depuis la console:

int n = Integer.parseInt(System.console().readLine());
manquant
la source
17
Je voudrais commenter que dans la plupart des IDE, System.console retournera null lorsque l'application est appelée via un lanceur, ce qui rend le débogage difficile. Cela semble être vrai pour IDEA, Eclipse et NetBeans.
Andrew White
1
S'il entre une chaîne ou «Enter», il lancera une NumberFormatException. Il est donc préférable de contrôler la chaîne avant de l'analyser en Integer
Vasile Surdu
et s'il y a plus d'un entier dans cette ligne séparés par un espace?
LostMohican
@LostMohican, il existe des moyens de lire des jetons délimités par des espaces à l'aide de Scanner.
missingfaktor
17

Ici, je fournis 2 exemples pour lire la valeur entière à partir de l'entrée standard

Exemple 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);
   }
 }

Exemple 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);
     }
 }

Je préfère le premier exemple, c'est facile et tout à fait compréhensible.
Vous pouvez compiler et exécuter les programmes JAVA en ligne sur ce site Web: http://ideone.com

Srivastav
la source
1
ex 2 n'est peut-être pas le meilleur moyen d'introduire le flux d'entrée ... ou je suppose que les "objets d'entrée du système" à quelqu'un de nouveau dans OOD, Java ou le codage d'ailleurs - tout ce code descriptif et vous nommez l'objet clé " r ".... un sage, hein? xD +1
Tapper7
1
L'exemple 1 n'est pas protégé contre les entrées de faux format
Martin Meeser
11

Vérifier celui-ci:

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();
    }
}
la perte
la source
Quel est l'intérêt de capturer NumberFormatExceptionpuis d'imprimer la trace de la pile?
missingfaktor
6

La deuxième réponse ci-dessus est la plus simple.

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

La question est "Comment lire à partir d'une entrée standard".

Une console est un appareil généralement associé au clavier et à l'écran à partir desquels un programme est lancé.

Vous souhaiterez peut-être tester si aucun périphérique de console Java n'est disponible, par exemple Java VM non démarré à partir d'une ligne de commande ou si les flux d'entrée et de sortie standard sont redirigés.

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

L'utilisation de la console est un moyen simple de saisir des nombres. Combiné avec 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
la source
2
-1 pour ne pas avoir répondu à la question. Il ne veut pas lire depuis une console, mais plutôt depuis une entrée standard.
Ingo
La question indique clairement qu'il ne veut pas lire depuis la console. en tout cas merci de donner quelques informations sur la lecture de la console.
Srivastav
4

vérifier celui-ci:

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
la source
3

Cela cause des maux de tête, j'ai donc mis à jour une solution qui fonctionnera en utilisant les outils matériels et logiciels les plus courants disponibles pour les utilisateurs en décembre 2014. Veuillez noter que le JDK / SDK / JRE / Netbeans et leurs classes suivantes, les compilateurs de bibliothèques de modèles, les éditeurs et les débogueurs sont libre.

Ce programme a été testé avec Java v8 u25. Il a été écrit et construit à l'aide de
Netbeans IDE 8.0.2, JDK 1.8, le système d'exploitation est win8.1 (excuses) et le navigateur est Chrome (double excuses) - destiné à aider UNIX-cmd-line OG à traiter avec une interface graphique moderne basée sur le Web Les IDE à ZERO COST - parce que les informations (et les IDE) doivent toujours être gratuites. Par Tapper7. Pour tout le monde.

bloc de code:

    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
la source