İçeriğe geç

Menü

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

Java Scanner hasNextInt() Nasıl Kullanılır? Geçerli Sayı Girdisi Alma

java-scanner-hasnextint-nasil-kullanilir-gecerli-sayi-girdisi-alma
Bu yazıda neler var?
  1. hasNextInt() sıradaki tokenı nasıl kontrol eder?
  2. hasNextInt(), nextInt() ve nextLine() hangi görevi üstlenir?
  3. Pozitif tam sayı alana kadar while döngüsü nasıl kurulur?
  4. Geçerli, metinsel, negatif ve sıfır girdilerde akış nasıl ilerler?
  5. Sık Sorulan Sorular

Java Scanner hasNextInt() nasıl kullanılır? Scanner'ın sıradaki tokenının int olarak yorumlanıp yorumlanamayacağını hasNextInt() ile kontrol edersin. Sonuç true ise nextInt() ile değeri alır, false ise nextLine() ile geçersiz satırı tüketip döngüde yeniden giriş istersin.

Bu yaklaşım, tür kontrolünü değer kuralından ayırır: negatif veya sıfır bir token int olabilir, fakat yalnızca pozitif değer gerekiyorsa okunan değeri ayrıca karşılaştırman gerekir.

hasNextInt() sıradaki tokenı nasıl kontrol eder?

hasNextInt() sıradaki tokenı nasıl kontrol eder?

Scanner, girdiyi ayraç düzenine göre tokenlara ayırır. Varsayılan kullanımda boşluk karakterleri ayraç görevi görür. Örneğin 42 elma girdisinde ilk token 42, sonraki token elma olur. Bu nedenle hasNextInt() satırın tamamını değil, sırada bulunan tokenı denetler. 12 kitap satırında ilk kontrol 12 için true döner; kitap sonraki token olarak kalır.

hasNextInt() sayıyı okumaz; sıradaki girdinin int olarak yorumlanabilir olup olmadığını kontrol eder. Sonuç true olduğunda aynı tokenı nextInt() ile okumak güvenlidir. Kontrol sırasında Scanner konumu ilerlemediği için değer henüz tüketilmemiş olur.

Sonuç false olduğunda geçersiz token yerinde kalır. Bu dalda nextLine() çağrısı, o tokenın bulunduğu satırın kalanını tüketir ve Scanner'ı sonraki satırın başına taşır. Böylece döngü aynı metni yeniden kontrol etmek yerine yeni bir girişe geçer. Aynı satırda başka parçalar varsa onlar da bu temizlik sırasında tüketilir. hasNextInt() pozitiflik kontrolü yapmaz: -3 ve 0 tür açısından geçerli int değerleridir. Pozitiflik için sayi > 0 gibi ayrı bir karşılaştırma gerekir.

Bu ayrımı küçük Java alıştırmalarıyla pekiştirmek için Java bilgi testini çözebilirsin.

hasNextInt(), nextInt() ve nextLine() hangi görevi üstlenir?

Üç metodun görevini aynı konsol akışında şöyle ayırabilirsin: önce sıradaki tokenın türü kontrol edilir, sonra uygun değer okunur; kontrol başarısızsa mevcut satır temizlenir. Bu sıra, Scanner konumunun hangi adımda ilerlediğini anlamayı kolaylaştırır.

Metot Görevi Çağrılma sırası Geçersiz girdide rolü
hasNextInt() Sıradaki tokenın int olarak yorumlanabilir olup olmadığını kontrol eder ve true veya false döndürür. Girdi tüketilmeden, nextInt() çağrısından önce. Geçersiz tokenı tüketmez; sonuç false olur ve satırın temizlenmesi gerekir.
nextInt() Başarılı kontrolden sonra sıradaki tokenı int olarak okur ve eşleşen girdinin üzerinden ilerler. hasNextInt() true verdikten sonra. Geçersiz girdinin bulunduğu dalda çağrılmaz; önce nextLine() ile satır ele alınır.
nextLine() Mevcut satırın kalanını okur ve Scanner'ı sonraki satırın başına taşır. hasNextInt() false verdiğinde. Geçersiz tokenın bulunduğu satırı tüketerek döngünün yeni girişe ilerlemesine yardımcı olur.

Bu görev ayrımında hasNextInt() karar verir, nextInt() değeri okur, nextLine() ise başarısız denemeden sonra satırın kalanını tüketir. Pozitiflik ya da sıfırdan büyük olma gibi uygulama kuralları bu metotların tür kontrolünden ayrıdır. Değer okunduktan sonra ayrıca karşılaştırılır; bu yüzden 0 veya negatif bir sayı geçerli int olsa da uygulamanın kabul kuralına uymayabilir.

Java ve diğer temel programlama konularındaki bilgini ölçmek için bilgi testleri merkezi sayfasını kullanabilirsin.

Pozitif tam sayı alana kadar while döngüsü nasıl kurulur?

Pozitif tam sayı alana kadar while döngüsü nasıl kurulur?

Pozitif tam sayı almak için iki ayrı denetimi aynı döngüde kurmalısın: Önce sıradaki tokenın int olarak okunup okunamayacağını, ardından okunan değerin sıfırdan büyük olup olmadığını kontrol etmelisin. hasNextInt() yalnızca kontrol yapar ve girdide ilerlemez. Kontrol başarılıysa nextInt() tam sayı tokenını okur. nextLine() ise geçerli satırın kalanını tüketerek tarayıcıyı sonraki satırın başına taşır.

Aşağıdaki uygulamada sayi değişkeninin başlangıç değerinin 0 olması, while döngüsünün ilk kez çalışmasını sağlar:

import java.util.Scanner;

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

        while (sayi <= 0) {
            System.out.print("Pozitif bir tam sayı girin: ");

            if (scanner.hasNextInt()) {
                sayi = scanner.nextInt();

                if (sayi <= 0) {
                    System.out.println("Sayı sıfırdan büyük olmalı.");
                    scanner.nextLine();
                }
            } else {
                System.out.println("Geçerli bir tam sayı girin.");
                scanner.nextLine();
            }
        }

        System.out.println("Kabul edilen sayı: " + sayi);
        scanner.close();
    }
}

hasNextInt() sonucu true olduğunda hemen nextInt() çağrılır. Okunan değer sıfır veya negatifse kullanıcıya değer kuralını açıklayan mesaj gösterilir ve satırın kalanı nextLine() ile tüketilir. Sonraki turda giriş istemi yeniden yazdırılır.

Kontrol sonucu false olduğunda sayı okunmaya çalışılmaz. Hata mesajından sonra çağrılan nextLine(), metinsel girdinin bulunduğu satırı tüketir. Pozitif bir değer okunduğunda ise sayi <= 0 koşulu artık sağlanmaz, döngü sona erer ve kabul edilen sayı ekrana yazdırılır.

Geçerli, metinsel, negatif ve sıfır girdilerde akış nasıl ilerler?

hasNextInt(), pozitiflik kontrolü yapmaz. Negatif sayılar ve sıfır da int olarak yorumlanabildiği için bu girdilerde sonuç true olabilir. Değerin kabul edilmesi için ayrıca sayi > 0 karşılaştırması gerekir. Metinsel bir token ise bu kontrolden geçmez.

Girdi:
42

Beklenen çıktı:
Pozitif bir tam sayı girin:
Kabul edilen sayı: 42

Girdi:
merhaba
18

Beklenen çıktı:
Pozitif bir tam sayı girin:
Geçerli bir tam sayı girin.
Pozitif bir tam sayı girin:
Kabul edilen sayı: 18

Girdi:
-3
7

Beklenen çıktı:
Pozitif bir tam sayı girin:
Sayı sıfırdan büyük olmalı.
Pozitif bir tam sayı girin:
Kabul edilen sayı: 7

Girdi:
0
7

Beklenen çıktı:
Pozitif bir tam sayı girin:
Sayı sıfırdan büyük olmalı.
Pozitif bir tam sayı girin:
Kabul edilen sayı: 7

Giriş isteminin yeniden gösterilmesi, while döngüsünün yeni tura geçtiğini belirtir. merhaba girdisinde false dalı çalışır ve nextLine() geçersiz tokenla birlikte satırın kalanını tüketir. Böylece sonraki kontrol aynı hatalı token üzerinde tekrarlanmaz. -3 ve 0 girdilerinde ise tür kontrolü başarılı olur, fakat pozitiflik koşulu sağlanmaz.

  • nextInt() çağrısından önce hasNextInt() ile tokenın uygunluğunu kontrol et.
  • false dalında nextLine() çağırarak hatalı satırı tüket.
  • Okunan tam sayı için ayrıca sayi > 0 karşılaştırmasını yap.

Döngüler, koşullar ve konsol girdisi doğrulama gibi konuları uygulamalı olarak geliştirmek için Lise ve Üniversite öğrencilerine yönelik birebir Java özel ders programını inceleyebilirsin.

Sık Sorulan Sorular

hasNextInt() negatif sayıları ve sıfırı neden geçerli kabul eder?

Çünkü hasNextInt(), tokenın pozitif olup olmadığını değil, int türünde okunup okunamayacağını denetler. Negatif değerler ve sıfır geçerli tam sayılardır. Pozitiflik, sayı okunduktan sonra sayi > 0 gibi ayrı bir koşulla kontrol edilmelidir.

Geçersiz token nextLine() ile tüketilmezse while döngüsü neden ilerlemez?

hasNextInt() başarısız olduğunda tarayıcının konumu değişmez. Geçersiz token tüketilmezse sonraki döngü turunda aynı token yeniden kontrol edilir ve sonuç tekrar false olur. nextLine(), geçerli satırı geride bırakarak sonraki girişin okunabilmesini sağlar.

Tür kontrolünü, token tüketimini ve pozitiflik kuralını ayrı adımlarda kurduğunda döngü, hatalı girdiden sonra ilerler ve yalnız pozitif tam sayı alındığında sona erer.

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