Java'da standart girişten tamsayı değeri nasıl okunur


109

Java'da bir tamsayı değişkenini okumak için hangi sınıfı kullanabilirim?

Yanıtlar:


141

java.util.Scanner( API ) kullanabilirsiniz :

import java.util.Scanner;

//...

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

Ayrıca, girişi düzenli ifade, vb. İle belirtebilir. API'nin örnekleri vardır ve bu sitede başka pek çok şey vardır (örneğin, bir tarayıcının yanlış tür girildiğinde istisnalar atmasını nasıl önleyebilirim ? ).


1
Tutulma kimliğimde Syntax hatası olmadan çalıştırmaya çalışıyorum, ancak okunan tamsayı değerlerini çıkarmaya çalıştığımda konsol çıktısında hiçbir şey göstermiyor. Bu neden böyle?
rh979

@polygenelubricants: in.nextInt () yalnızca int değerini kabul eder, Tamsayı değeri değil
Ved Prakash

32

Java 6 kullanıyorsanız, konsoldan bir tamsayı okumak için aşağıdaki oneliner'ı kullanabilirsiniz:

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

17
Çoğu IDE altında System.console uygulamasının bir başlatıcı aracılığıyla çalıştırıldığında hata ayıklamayı zorlaştıracak şekilde boş döneceğini yorumlamak isterim. Bu, IDEA, Eclipse ve NetBeans için doğru görünüyor.
Andrew White

1
Bir dize veya 'Enter' girerse, bir NumberFormatException oluşturur. Bu nedenle, Tamsayı olarak ayrıştırmadan önce dizeyi kontrol etmek daha iyidir
Vasile Surdu

ya bu satırda boşlukla ayrılmış birden fazla tam sayı varsa?
LostMohican

@LostMohican, Tarayıcı kullanarak boşlukla sınırlanmış belirteçleri okumanın yolları vardır.
lostfaktor

17

Burada, standart girişten tamsayı değerini okumak için 2 örnek veriyorum

örnek 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);
   }
 }

Örnek 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);
     }
 }

İlk Örneği tercih ediyorum, kolay ve oldukça anlaşılır.
JAVA programlarını bu web sitesinde çevrimiçi olarak derleyebilir ve çalıştırabilirsiniz: http://ideone.com


1
ex 2, giriş akışını tanıtmanın en iyi yolu olmayabilir ... ya da "Sistemin Giriş Nesneleri" ni OOD, Java veya bu konuda kodlama konusunda yeni olan birine - tüm bu açıklayıcı kodu ve siz anahtar nesneyi adlandırın " r ".... bir akıllı adam, ha? xD +1
Tapper7

1
Örnek 1, yanlış biçim girdilerine karşı
korunmuyor

11

Bunu kontrol et:

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

NumberFormatExceptionYığın izini yakalayıp sonra yazdırmanın ne anlamı var ?
lostfaktor

6

Yukarıdaki ikinci cevap en basit olanıdır.

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

Soru "Standart girişten nasıl okunur".

Konsol, tipik olarak bir programın başlatıldığı klavye ve ekran ile ilişkili bir cihazdır.

Herhangi bir Java konsol cihazının mevcut olup olmadığını test etmek isteyebilirsiniz, örneğin Java VM bir komut satırından başlatılmamış veya standart giriş ve çıkış akışları yeniden yönlendirilmiş.

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

Konsol kullanmak, sayı girmenin basit bir yoludur. ParseInt () / Double () vb. İle birleştirilmiştir.

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

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

2
-1 soruyu cevaplamadığı için. Bir konsoldan okumak istemiyor, bunun yerine standart girdiden okumak istiyor.
Ingo

Soru açıkça konsoldan okumak istemediğini ifade ediyor. neyse, konsoldan nasıl okunacağı konusunda biraz bilgi verdiğiniz için teşekkürler.
Srivastav

4

Bunu kontrol et:

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

Bu baş ağrısına neden oluyor, bu yüzden Aralık 2014'te kullanıcılara sunulan en yaygın donanım ve yazılım araçlarını kullanarak çalışacak bir çözümü güncelledim. Lütfen JDK / SDK / JRE / Netbeans ve bunların sonraki sınıfları, şablon kitaplıkları derleyicileri, düzenleyicileri ve hata ayıklayıcıların Bedava.

Bu program Java v8 u25 ile test edilmiştir.
Netbeans IDE 8.0.2, JDK 1.8, işletim sistemi win8.1 (özür diler) ve tarayıcı Chrome (çifte özür) kullanılarak yazılmış ve oluşturulmuştur - UNIX-cmd-line OG'nin modern GUI-Web tabanlı anlaşmasına yardımcı olmak içindir. SIFIR MALİYETTE IDE'ler - çünkü bilgi (ve IDE'ler) her zaman ücretsiz olmalıdır. Tapper7 tarafından. Herkes için.

kod bloğu:

    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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.