0

scan.nextLine Atlama Problemi…

Share

Java’da programcılarını şaşırtma eğiliminde olan yaygın bir hata vardır. Bu, bir dizi giriş bilgi istemini bir araya getirdiğinizde ve scanner.nextLine() yöntemi girişlerden biri atlar ve herhangi bir hata veya hata belirtisi olmadan ya devam eder ya da sonda ise kodu sonlandırır.

Kullanıcıdan scan.nextLine ile adını soyadını istersiniz girer, sonra mesleğini istersiniz girer, sonra scan.nextInt ile yaşını istersiniz girer. Daha sonra tekrar scan.nextLine ile bir bilgi istediğinizde teorik olarak sorun görünmez ama kimi zaman java burayı atlar ve exception da fırlatmaz.

Bunun iki yöntemin nasıl çalıştığıyla ilgisi var. İlki, scanner.nextLine()kullanıcıdan adını ister.

Kullanıcı adı girip enter tuşuna bastığında, scanner.nextLine()adı ve sonundaki enter veya yeni satır karakterini kullanır.

Bu, giriş arabelleğinin artık boş olduğu anlamına gelir. Ardından scanner.nextInt()kullanıcıdan yaşını ister. Kullanıcı yaşı girer ve enter’a basar.

 scanner.nextLine() yönteminden farklı olarak scanner.nextInt() yöntemi yalnızca tamsayı kısmını kullanır ve giriş veya yeni satır karakterini giriş arabelleğinde bırakır.

Sonra scanner.nextLine() çağrıldığında, giriş arabelleğinde hala mevcut olan enter veya yeni satır karakterini bulur, kullanıcıdan girdi olarak yanlış yapar ve hemen geri döner.

Gördüğünüz gibi, gerçek hayattaki birçok sorun gibi, bu da kullanıcı ile programcı arasındaki yanlış anlaşılmadan kaynaklanmaktadır.

Çözüm ise düşünüldüğünden daha kolay. Tek yapmanız gereken, arama gerçekleştikten sonra scanner.nextLine() ile ek bir arama yapmaktır.

Bu çözüm işe yarasa da, diğer yöntemlerden herhangi birini çağırdığınızda ek çağrılar eklemeniz gerekecek . Daha küçük programlar için sorun değil, ancak daha büyük programlarda bu çok hızlı bir şekilde çok çirkinleşebilir.

işte bir kod örneği bold yazılan satır sorunu çözmüş oldu.

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

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

        System.out.print("Yaşınız: "+name);
        int age = scanner.nextInt();

        // arabellekte kalan satırsonu karakterini kullanalım
        scanner.nextLine();

        System.out.printf("Memleketiniz neresi?);
        String city= scanner.nextLine();

        System.out.printf("Güzel bir yer :"+ city);

        scanner.close();

    }

}