Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Java Scanner ile Kullanıcıdan Sayı ve Metin Nasıl Alınır?

java-scanner-ile-kullanicidan-sayi-ve-metin-nasil-alinir
Bu yazıda neler var?
  1. Java Scanner nesnesi nasıl oluşturulur ve temel kullanım nedir?
  2. nextInt, nextDouble, next, nextLine ve hasNext yöntemleri nasıl seçilir?
  3. Sayısal girişten sonra nextLine nasıl doğru kullanılır?
  4. Ders adı, ders sayısı ve not alan çalışan Java programı
  5. Geçersiz girişleri nasıl kontrol eder ve doğru okuma sırasını nasıl seçersin?
  6. Sık Sorulan Sorular

Java Scanner ile kullanıcıdan sayı ve metin almak için önce Scanner nesnesini System.in ile oluşturur, ardından girdinin türüne uygun olarak nextInt(), nextDouble(), next() veya nextLine() yöntemini kullanırsın. Seçim, girdinin tam sayı, ondalıklı sayı, boşluk içermeyen tek token ya da satırın tamamı olmasına göre yapılır; tür kontrolü gerektiğinde hasNextInt() ve hasNextDouble() gibi yöntemler okuma öncesinde kullanılabilir.

Java Scanner nesnesi nasıl oluşturulur ve temel kullanım nedir?

Scanner sınıfını kullanmak için önce java.util.Scanner paketini içe aktarman gerekir. Ardından Scanner scanner = new Scanner(System.in); satırıyla, konsoldan gelen standart girdiyi okuyacak nesneyi oluşturursun. Bu nesne sayesinde kullanıcıdan metin, tam sayı veya ondalıklı sayı alabilir ve sonucu uygun Java veri türünde saklayabilirsin.

import java.util.Scanner;

public class ScannerTemel {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Adın: ");
        String ad = scanner.nextLine();

        System.out.print("Ders sayısı: ");
        int dersSayisi = scanner.nextInt();

        System.out.println(ad + " için ders sayısı: " + dersSayisi);

        scanner.close();
    }
}

Örnek giriş:

Elif
4

Beklenen çıktı:

Adın: Elif
Ders sayısı: 4
Elif için ders sayısı: 4

Bu örnekte nextLine() kullanıcının yazdığı adı metin olarak, nextInt() ise ders sayısını tam sayı olarak okur. Scanner, konsol girişini kendisi üretmez; System.in üzerinden gelen veriyi okuyup programın kullanabileceği değerlere dönüştürür.

Java öğrenirken giriş alma konusunu döngüler, koşullar ve hata ayıklama gibi başlıklarla birlikte uygulamak istersen birebir Java özel ders programı hakkında bilgi edinebilirsin.

Bağımsız bir konsol programında bütün okumalar bittikten sonra scanner.close() çağırmak uygundur. Scanner kapatıldığında, kullandığı giriş kaynağı da Closeable ise kapatılır. System.in bir InputStream olduğu için Scanner'ı erken kapatmak, programın daha sonraki System.in okumalarını etkileyebilir. Bu nedenle close() çağrısını son okuma işleminden sonra yapmalısın.

nextInt, nextDouble, next, nextLine ve hasNext yöntemleri nasıl seçilir?

nextInt, nextDouble, next, nextLine ve hasNext yöntemleri nasıl seçilir?

Scanner, girdiyi varsayılan olarak boşluk karakterlerine göre tokenlara ayırır. next() boşlukta durur, nextLine() satırın kalanını okur. hasNext() yalnızca bir sonraki tokenın bulunup bulunmadığını kontrol eder, veri türünü doğrulamaz. Tür kontrolü için hasNextInt() veya hasNextDouble() gibi yönteme özel kontroller seçilir. Bu kontrolleri tüm giriş akışının garantisi olarak değil, o andaki okuma adımını yönlendiren bir kontrol olarak düşünmek gerekir; konsol girdisinde yöntemler yeni veri bekleyebilir.

Tek bakışta karar çerçevesi şöyledir: boşluk içeren metin için nextLine(), tek token için next(), tam sayı için önce hasNextInt() sonra nextInt(), ondalıklı sayı için önce hasNextDouble() sonra nextDouble(), yalnızca bir sonraki tokenın varlığını görmek için hasNext() kullanılır.

Girdi ihtiyacı Kullanılacak yöntem Okuma sınırı Dikkat edilmesi gereken nokta
Tam sayı hasNextInt(), ardından nextInt() Bir sonraki token Sayı olmayan token doğrudan okunursa InputMismatchException oluşabilir.
Ondalıklı sayı hasNextDouble(), ardından nextDouble() Bir sonraki token Tokenın double olarak yorumlanabilir olup olmadığını önce kontrol edebilirsin.
Boşluk içermeyen tek parça next() Bir sonraki ayırıcıya kadar Metin boşluk içeriyorsa yalnızca ilk parça okunur.
Satırın tamamı nextLine() Satır sonuna kadar Satırdaki boşluklar korunur; önceki sayısal okumadan kalan satır sonu ayrıca ele alınmalıdır.
Bir sonraki tokenın varlığı hasNext() Okuma yapmadan sonraki tokenı kontrol eder Veri türünü doğrulamaz; gerektiğinde tür özelindeki kontrolü kullanmalısın.

Sayısal girişten sonra nextLine nasıl doğru kullanılır?

Sayısal girişten sonra nextLine nasıl doğru kullanılır?

Scanner varsayılan olarak boşluk, sekme ve satır sonunu token ayırıcı kabul eder. nextInt() veya nextDouble() sayısal tokenı okur, ancak bulunduğu satırın kalanını tüketmez. next() boşlukta durur, nextLine() satırın kalanını okur. nextLine() satır sonunu geçer fakat onu döndürdüğü metne eklemez.

Sayıyı ayrı bir satıra girdiğinde, hemen ardından çağrılan nextLine() genellikle boş metin döndürür; çünkü sayının bulunduğu satırda okunacak başka metin kalmamıştır. Ders adı bir sonraki satırdaysa okuma sırası şöyle kurulur:

int dersSayisi = giris.nextInt();
giris.nextLine(); // Sayının bulunduğu satırın kalanını geç
String dersAdi = giris.nextLine(); // Sonraki satırdaki ders adını oku

Bu sıra, sayı ile ders adının ayrı satırlarda girileceğini varsayar. Aynı satıra 36 Java Programlama yazılırsa ilk nextLine(), Java Programlama bölümünü okur. Böyle bir girişe izin veriyorsan kalan metni atma; ders adını o değerden alacak biçimde okuma sırasını değiştir.

Ders adı, ders sayısı ve not alan çalışan Java programı

Aşağıdaki program ders sayısını, boşluk içerebilen ders adını ve notu ayrı satırlardan alır. Locale.US seçimi, örnekteki 87.5 değerinin noktalı ondalık gösterimle okunması içindir. hasNextInt() ve hasNextDouble(), ilgili değeri okumadan önce sıradaki tokenın uygun sayısal türde yorumlanıp yorumlanamayacağını kontrol eder.

import java.util.Locale;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try (Scanner giris = new Scanner(System.in)) {
            giris.useLocale(Locale.US);

            System.out.println("Ders sayısını gir:");
            if (!giris.hasNextInt()) {
                System.out.println("Hata: Ders sayısı tam sayı olmalı.");
                return;
            }
            int dersSayisi = giris.nextInt();
            giris.nextLine();

            System.out.println("Ders adını gir:");
            String dersAdi = giris.nextLine();

            System.out.println("Notu gir:");
            if (!giris.hasNextDouble()) {
                System.out.println("Hata: Not sayı olarak girilmeli.");
                return;
            }
            double not = giris.nextDouble();

            System.out.println("Sonuç: " + dersAdi + ", "
                    + dersSayisi + " ders, not " + not);
        }
    }
}

Örnek giriş satırları sırasıyla 36, Java Programlama ve 87.5 şeklindedir. Girdi satırları hariç, programın yazdırdığı beklenen çıktı:

Ders sayısını gir:
Ders adını gir:
Notu gir:
Sonuç: Java Programlama, 36 ders, not 87.5

Bu kontroller yalnız sayısal türü sınar; ders adının boş olup olmadığını veya notun beklenen aralıkta bulunup bulunmadığını doğrulamaz. try bloğu bittiğinde Scanner kapanır ve bağlı olduğu System.in de kapanır. Bu düzen, örnekte olduğu gibi programın daha sonra konsoldan giriş almayacağı durum için uygundur.

Geçersiz girişleri nasıl kontrol eder ve doğru okuma sırasını nasıl seçersin?

Geçersiz girişleri yönetmenin temel yolu, okuyacağın verinin satır mı yoksa tek bir token mı olduğunu belirleyip dönüşümden önce uygun kontrolü yapmaktır. Uygulama öncesinde şu sırayı kontrol edebilirsin:

  1. Veri boşluk içerebiliyorsa nextLine() kullan.
  2. Veri tek bir token ise next() kullan.
  3. Beklenen değer tam sayıysa önce hasNextInt(), ardından nextInt() kullan.
  4. Beklenen değer ondalıklı sayıysa önce hasNextDouble(), ardından nextDouble() kullan.

hasNextInt() ve hasNextDouble(), sıradaki tokenın ilgili sayısal yöntemin anlayabileceği biçime uygun olup olmadığını kontrol etmeye yardımcı olur. Ancak bu kontrolleri programın tüm kurallarını doğrulayan kesin bir sonuç veya garanti gibi görme. Sayının izin verilen aralıkta olması, boş bırakılmaması ya da uygulamaya özgü başka koşulları karşılaması ayrıca denetlenebilir.

Bir hasNext kontrolü başarısız olduğunda Scanner giriş konumunu ilerletmez. Döngü içinde yalnızca aynı kontrolü tekrarlarsan geçersiz token yerinde kalır ve program aynı durumu yeniden görür. Bu nedenle geçersiz tokenı, veri akışına uygun biçimde next() veya nextLine() ile tüketip kontrolü yeniden yapmalısın.

Tüm okumalar tamamlandıktan sonra scanner.close() çağırılır. Scanner kapanırken alttaki kaynak kapatılabilir ve kapatılmış Scanner ile yeni okuma işlemi yapılamaz. Bu yüzden kapatma işlemini veri alma sürecinin ortasında değil, son okumanın ardından yapmalısın.

Java temel kavramlarını kendi seviyende kontrol etmek için ücretsiz Java bilgi testi çözerek hangi konuları tekrar etmen gerektiğini görebilirsin.

Sık Sorulan Sorular

nextInt() sonrasında nextLine() neden boş bir metin döndürebilir?

nextInt() sayısal tokenı okur, nextLine() ise geçerli satırın kalan kısmını döndürür. Sayısal değerden sonra satırda yalnızca satır sonu kaldıysa nextLine() boş bir metin verir.

next() ile nextLine() arasındaki temel fark nedir?

next() boşlukta durur, nextLine() satırın kalanını okur. Bu nedenle next() tek kelime veya token, nextLine() ise boşluk içerebilen metinler için uygundur.

hasNextInt() ile nextInt() arasındaki fark nedir?

hasNextInt(), sıradaki tokenın tam sayı olarak yorumlanıp yorumlanamayacağını kontrol eder ve giriş konumunu ilerletmez. nextInt() ise değeri okumaya ve dönüştürmeye çalışır; başarılı olduğunda tokenı tüketir, uyumsuz girişte hata oluşturabilir.

Scanner ne zaman kapatılmalıdır?

Scanner, programın onunla yapacağı tüm okumalar tamamlandıktan sonra kapatılmalıdır. Kapatıldıktan sonra yeni arama veya okuma işlemleri yapılamaz; bu nedenle close() çağrısını son okumadan önce kullanmamalısın.

Doğru okuma yöntemini seçip geçersiz tokenı tüketerek ilerlediğinde, Scanner ile kullanıcıdan veri alan programların daha düzenli çalışmasını sağlayabilirsin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara