Lesen des ganzzahligen Werts aus der Standardeingabe in Java


109

Welche Klasse kann ich zum Lesen einer Ganzzahlvariablen in Java verwenden?

Antworten:


141

Sie können java.util.Scanner( API ) verwenden:

import java.util.Scanner;

//...

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

Es kann auch Eingaben mit regulären Ausdrücken usw. tokenisieren. Die API enthält Beispiele und es gibt viele andere auf dieser Site (z. B. Wie kann ich verhindern, dass ein Scanner Ausnahmen auslöst, wenn der falsche Typ eingegeben wird? ).


1
Ich versuche, es in meiner Eclipse-ID ohne Syntaxfehler auszuführen, aber es zeigt nichts in der Konsolenausgabe an, wenn ich versuche, die gelesenen Ganzzahlwerte auszugeben. Warum ist das so?
Rh979

@polygenelubricants: in.nextInt () akzeptieren nur int-Wert nicht einen Integer-Wert
Ved Prakash

31

Wenn Sie Java 6 verwenden, können Sie den folgenden Oneliner verwenden, um eine Ganzzahl von der Konsole zu lesen:

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

17
Ich möchte kommentieren, dass System.console unter den meisten IDEs null zurückgibt, wenn die Anwendung über einen Launcher aufgerufen wird, was das Debuggen erschwert. Dies scheint für IDEA, Eclipse und NetBeans zu gelten.
Andrew White

1
Wenn er eine Zeichenfolge oder 'Enter' eingibt, wird eine NumberFormatException ausgelöst. Es ist also besser, die Zeichenfolge zu kontrollieren, bevor Sie sie auf Integer
Vasile Surdu

Was ist, wenn diese Zeile mehr als eine durch Leerzeichen getrennte Ganzzahl enthält?
LostMohican

@LostMohican, es gibt Möglichkeiten, durch Leerzeichen getrennte Token mit dem Scanner zu lesen.
Fehlender Faktor

17

Hier stelle ich 2 Beispiele zum Lesen des ganzzahligen Werts von der Standardeingabe bereit

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

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

Ich bevorzuge das erste Beispiel, es ist einfach und ziemlich verständlich.
Sie können die JAVA-Programme online auf dieser Website kompilieren und ausführen: http://ideone.com


1
Ex 2 ist möglicherweise nicht der beste Weg, um den Eingabestream einzuführen ... oder ich denke, die "Eingabeobjekte des Systems" für jemanden, der neu in OOD, Java oder Codierung ist - all dieser beschreibende Code und Sie benennen das Schlüsselobjekt " r ".... ein wiseguy, nicht wahr? xD +1
Tapper7

1
Beispiel 1 ist nicht gegen falsche
Formateingaben

11

Überprüfen Sie dieses:

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

Was NumberFormatExceptionbringt es, den Stack-Trace abzufangen und dann zu drucken?
fehlender Faktor

6

Die zweite Antwort oben ist die einfachste.

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

Die Frage lautet "Lesen von Standardeingaben".

Eine Konsole ist ein Gerät, das normalerweise der Tastatur und dem Display zugeordnet ist, von dem aus ein Programm gestartet wird.

Möglicherweise möchten Sie testen, ob kein Java-Konsolengerät verfügbar ist, z. B. dass Java VM nicht über eine Befehlszeile gestartet wurde oder die Standard-Eingabe- und Ausgabestreams umgeleitet werden.

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

Die Verwendung der Konsole ist eine einfache Möglichkeit, Zahlen einzugeben. Kombiniert mit parseInt () / Double () usw.

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

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

2
-1 für die Nichtbeantwortung der Frage. Er möchte nicht von einer Konsole lesen, sondern von der Standardeingabe.
Ingo

Die Frage besagt eindeutig, dass er nicht von der Konsole lesen möchte. Trotzdem danke, dass du ein paar Informationen zum Lesen von der Konsole gegeben hast.
Srivastav

4

Überprüfen Sie dieses:

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

Dies verursacht Kopfschmerzen, daher habe ich eine Lösung aktualisiert, die mit den gängigsten Hardware- und Softwaretools ausgeführt wird, die Benutzern im Dezember 2014 zur Verfügung stehen. Bitte beachten Sie, dass JDK / SDK / JRE / Netbeans und ihre nachfolgenden Klassen, Vorlagenbibliotheks-Compiler, Editoren und Debuggerz sind frei.

Dieses Programm wurde mit Java v8 u25 getestet. Es wurde geschrieben und gebaut mit
Netbeans IDE 8.0.2, JDK 1.8, OS Win8.1 (Entschuldigung) und Browser Chrome (Doppel-Entschuldigung) IDEs bei ZERO COST - weil Informationen (und IDEs) immer frei sein sollten. Von Tapper7. Für jeden.

Codeblock:

    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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.