1. kullanarak konsoldan okumaSystem.in

Önceki derslerde, ekranda bilgi görüntüleme komutlarını tanıdık. System.outBunu yapmak için, nesneyi ve onun print()ve yöntemlerini kullandık println(). Bu basit ve kullanışlı.

Ancak, muhtemelen tahmin ettiğiniz gibi, ekranda bilgi görüntülemek bizim için yeterli değil. Çoğu programın amacı, kullanıcı için faydalı bir şeyler yapmaktır. Bu, kullanıcının klavyeden veri girebilmesinin çok sık gerekli olduğu anlamına gelir.

Çıktı için olduğu gibi, veri girişi için de özel bir nesnemiz var — System.in. Ama ne yazık ki bizim için istediğimiz kadar uygun değil. Her seferinde bir karakter klavyeden veri okumamızı sağlar .

System.inBunu geliştirmek için, nesneyle eşleştirildiğinde bize ihtiyacımız olan her şeyi verecek başka bir sınıf kullanacağız . Uzun bir süredir Java'nın her duruma uygun sınıfları vardır. Ve şimdi onlardan birini tanıyacağız.


2. Scannersınıf

Sınıf Scanner(tam ad: java.util.Scanner), konsol, dosyalar ve İnternet gibi farklı kaynaklardan veri okuyabilir. System.inKlavyeden veri okumasını istiyorsak, nesneyi veri kaynağı olarak hizmet edecek bir argüman olarak iletmeliyiz . Ve sonra Tarayıcı nesnesi onunla ne yapacağını çözecektir.

Bir nesne kullanarak klavyeden okumak Scannerşuna benzer:

kod Açıklama
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Bir nesne oluşturuyoruz Scanner. Klavyeden bir satır metin
okuyoruz . Klavyeden bir sayı okuyoruz .

Kolay görünüyor, ama gerçekten bu kadar basit mi?

Bence bir sürü sorunuz olmalı ve şimdi onları cevaplayacağız.

Ama önce, sınıfı kullanan eksiksiz bir program örneği gösterelim Scanner:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      String name = console.nextLine();
      int age = console.nextInt();

      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
   }
}

3. ScannerNesne oluşturma

İlk soru, bu çizgi nedir Scanner console = new Scanner (System.in);?

Bu satır kafa karıştırıcı olabilir, ancak her zaman benzer şeyler göreceksiniz. Bu yüzden burada neler olduğunu açıklamanın önemli olduğunu düşünüyoruz.

Genellikle metin içeren bir değişkeni nasıl oluşturduğumuzu hatırlayın:

String str = "text";
Bir dize değişkenini bildirme ve başlatma

Önce değişkenin tipini ( String), sonra ismini ( str) ve son olarak eşittir işaretinden sonra değerini yazıyoruz.

Şaşırtıcı çizgimiz aslında aynı:

Scanner console = new Scanner(System.in);
ScannerBir değişkeni bildirme ve başlatma

Eşittir işaretinin solundaki her şey, consoleadı türü olan bir değişkenin bildirimidir Scanner. s Bunun yerine onu veya scannerveya hatta diyebilirsiniz keyboard. O zaman kod şöyle görünür:

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

Bence bu her şeyi çok daha net hale getiriyor.

Ancak eşittir işaretinin sağındaki kod biraz daha karmaşıktır. Şimdi bundan bahsediyorum new Scanner(System.in); , burada da doğaüstü bir şey olmuyor dedi.

Bu kodda, Java makinesine şunu söylüyoruz: newtürü olan yeni bir nesne (anahtar sözcük) oluşturun ve nesneyi yeni oluşturulan nesne için veri kaynağı olarak Scanner iletin .System.inScanner

 Bu satırın tamamını çalıştırdıktan sonra, programımızın klavyeden veri okumak için kullanacağı Scanneradında bir değişkenimiz olacak .console


4. Yöntem listesi

Yukarıdaki örnekte, değişkenimiz Scanner consolebir nesneye referans depolar Scanner.

Bir değişken tarafından başvurulan bir nesnedeki yöntemleri çağırmak için, değişkenin adından sonra bir nokta, ardından yöntem adı ve herhangi bir argüman yazarsınız. Komutun genel görünümü aşağıdaki gibidir:

variable.method(arguments);
Bir değişken tarafından başvurulan bir nesne üzerinde bir yöntem çağırma

Örnekler:

System.out.println("Hello");
System.out.println(1);

Bir işleve bağımsız değişkenler iletmeyi planlamıyorsanız, boş parantezler yazmanız yeterlidir:

variable.method();
Argümanları iletmeden bir yöntemi çağırmak

Örnek:

System.out.println();

5. Konsol girişi

Bir nesnemiz olduğunda Scanner, klavyeden veri almak kolaydır.

Klavyeden bir satırı okumak için şu komuta ihtiyacınız var:

String str = console.nextLine();

Programın çalışması bu satıra geldiğinde duracak ve kullanıcının veri girip enter tuşuna basmasını bekleyecektir. Ardından, kullanıcının girdiği her şey değişkende saklanır str.

Klavyeden bir sayı okumak için şu komuta ihtiyacınız vardır:

int number = console.nextInt();

Buradaki her şey önceki komut gibidir. Programın çalışması bu satıra geldiğinde duracak ve kullanıcının veri girip enter tuşuna basmasını bekleyecektir. Bundan sonra, kullanıcının girdiği her şey bir sayıya dönüştürülür ve değişkende saklanır number.

Kullanıcı bir tamsayıya dönüştürülemeyecek bir veri girdiyse, program bir hata üretecek ve kapanacaktır.

Bir kesirli sayıyı klavyeden okumak için şu komuta ihtiyacınız vardır:

double number = console.nextDouble();

Bu ifade, yönteme çok benzer nextInt(), yalnızca girilen verilerin bir sayıya dönüştürülüp dönüştürülemeyeceğini kontrol eder double.

Klavyeden iki sayıyı okuyan ve toplamlarını ekranda gösteren bir program örneği:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      int a = console.nextInt();
      int b = console.nextInt();

      System.out.println(a + b);
   }
}
Not

Kullanıcı, boşluklarla ayırarak tek bir satıra birkaç sayı girebilir: sınıfın yöntemleri Scannerbununla nasıl başa çıkacağını bilir. Bununla birlikte, program sadece kullanıcı tuşuna bastıktan sonra sayıları okur Enter.



6. Sınıfın diğer Scanneryöntemleri

Bu arada, yukarıdaki yöntemler sınıfın Scannersunduğu her şey değildir. Yöntemlerin tam listesi şuna benzer:

Yöntem Tanım
nextByte()
Verileri okur ve bir formata dönüştürür.byte
nextShort()
Verileri okur ve bir formata dönüştürür.short
nextInt()
Verileri okur ve bir formata dönüştürür.int
nextLong()
Verileri okur ve bir formata dönüştürür.long
nextFloat()
Verileri okur ve bir formata dönüştürür.float
nextDouble()
Verileri okur ve bir formata dönüştürür.double
nextBoolean()
Verileri okur ve bir formata dönüştürür.boolean
next()
Bir "jeton" okur. Belirteçler boşluklarla veya enter tuşuna basılarak ayrılır
nextLine()
Tüm satırı okur

Girdideki bir sonraki belirteci gerçekten getirmeden kontrol etmenizi sağlayan yöntemler de vardır (okumak için hangi yöntemi kullanacağınızı bilmek için).

Yöntem Tanım
hasNextByte()
var bytemı Giriş a'ya dönüştürülebilir mi byte?
hasNextShort()
var shortmı Giriş a'ya dönüştürülebilir mi short?
hasNextInt()
var intmı Giriş dönüştürülebilir mi int?
hasNextLong()
var longmı Giriş a'ya dönüştürülebilir mi long?
hasNextFloat()
var floatmı Giriş a'ya dönüştürülebilir mi float?
hasNextDouble()
var doublemı Giriş a'ya dönüştürülebilir mi double?
hasNextBoolean()
var booleanmı Giriş a'ya dönüştürülebilir mi boolean?
hasNext()
Başka jeton var mı?
hasNextLine()
Başka bir hat var mı?

7. Bir diziden veri okuma

ScannerSınıfın çeşitli kaynaklardan veri okuyabildiğinden daha önce bahsetmiştik . Bu kaynaklardan biri bir metin dizisidir .

Şuna benzer:

String str = "text";
Scanner scanner = new Scanner(str);

Nesneyi oluştururken , nesne yerine Scannerdizeyi geçiyoruz . Ve şimdi nesne dizgeden veri okuyacak. Örnek:strSystem.inscanner

Program kodu: Açıklama:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}




// bir == 10; 
// b == 20; 
Ekran çıktısı şöyle olacaktır:30