Bagaimana membaca nilai integer dari input standar di Java


109

Kelas apa yang dapat saya gunakan untuk membaca variabel integer di Java?

Jawaban:


141

Anda dapat menggunakan java.util.Scanner( API ):

import java.util.Scanner;

//...

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

Itu juga dapat menandai masukan dengan ekspresi reguler, dll. API memiliki contoh dan ada banyak contoh lainnya di situs ini (mis. Bagaimana cara menjaga pemindai agar tidak memberikan pengecualian ketika jenis yang salah dimasukkan? ).


1
Saya mencoba menjalankannya di ID gerhana saya tanpa kesalahan Sintaks tetapi tidak menunjukkan apa pun di output konsol ketika saya mencoba untuk mengeluarkan nilai integer baca. Mengapa demikian?
rh979

@polygenelubricants: in.nextInt () hanya menerima nilai int bukan nilai Integer
Ved Prakash

31

Jika Anda menggunakan Java 6, Anda dapat menggunakan oneliner berikut untuk membaca integer dari konsol:

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

17
Saya ingin berkomentar bahwa di bawah sebagian besar IDE System.console akan mengembalikan null ketika aplikasi dipanggil melalui peluncur sehingga sulit untuk di-debug. Ini tampaknya benar untuk IDEA, Eclipse, dan NetBeans.
Andrew White

1
Jika dia memasukkan string atau 'Enter' itu akan memunculkan NumberFormatException. Jadi lebih baik untuk mengontrol string sebelum menguraikannya menjadi Integer
Vasile Surdu

bagaimana jika ada lebih dari satu bilangan bulat di baris yang dipisahkan oleh spasi?
LostMohican

@LostMohican, ada cara untuk membaca token yang dibatasi spasi putih menggunakan Scanner.
missingfaktor

17

Di sini saya memberikan 2 contoh untuk membaca nilai integer dari input standar

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

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

Saya lebih suka Contoh Pertama, mudah dan cukup dimengerti.
Anda dapat menyusun dan menjalankan program JAVA secara online di situs web ini: http://ideone.com


1
ex 2 mungkin bukan cara terbaik untuk memperkenalkan aliran masukan ... atau saya kira "Objek Input Sistem" kepada seseorang yang baru mengenal OOD, Java atau pengkodean dalam hal ini - semua kode deskriptif itu dan Anda menamai objek kuncinya " r ".... seorang wiseguy, eh? xD +1
Penyadap7

1
Contoh 1 tidak dilindungi dari input format palsu
Martin Meeser

11

Periksa ini:

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

Apa gunanya menangkap NumberFormatExceptiondan kemudian mencetak jejak tumpukan?
missingfaktor

6

Jawaban kedua di atas adalah yang paling sederhana.

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

Pertanyaannya adalah "Bagaimana membaca dari input standar".

Konsol adalah perangkat yang biasanya dikaitkan dengan keyboard dan tampilan tempat program diluncurkan.

Anda mungkin ingin menguji apakah tidak ada perangkat konsol Java yang tersedia, misalnya Java VM tidak dimulai dari baris perintah atau aliran input dan output standar dialihkan.

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

Menggunakan konsol adalah cara sederhana untuk memasukkan angka. Dikombinasikan dengan parseInt () / Double () dll.

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

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

2
-1 karena tidak menjawab pertanyaan. Dia tidak ingin membaca dari konsol, melainkan dari input standar.
Ingo

Pertanyaan dengan jelas menyatakan bahwa Dia tidak ingin membaca dari konsol. terima kasih telah memberikan beberapa info tentang cara membaca dari konsol.
Srivastav

4

Periksa ini:

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

Hal ini menyebabkan sakit kepala, jadi saya memperbarui solusi yang akan berjalan menggunakan perangkat keras dan perangkat lunak paling umum yang tersedia untuk pengguna pada Desember 2014. Harap dicatat bahwa JDK / SDK / JRE / Netbeans dan kelas berikutnya, kompiler perpustakaan template, editor dan debuggerz adalah Gratis.

Program ini telah diuji dengan Java v8 u25. Itu ditulis dan dibangun menggunakan
Netbeans IDE 8.0.2, JDK 1.8, OS adalah win8.1 (maaf) dan browser adalah Chrome (permintaan maaf ganda) - dimaksudkan untuk membantu kesepakatan UNIX-cmd-line OG dengan GUI-berbasis Web modern IDE dengan BIAYA NOL - karena informasi (dan IDE) harus selalu gratis. Oleh Tapper7. Untuk semua orang.

blok kode:

    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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.