Şimdi Ara

Java Scanner Sınıfı Problemi

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
9
Cevap
0
Favori
2.702
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Kullanıcıdan id alırken “login_id.input.Next()” kullandığımda program evet sorunsuz çalışıyor fakat “login_id.input.NextLine” kullandığımda o satırı es geçiyor ben ise tüm satırı almak istediğim için “input.NextLine” ile bu programı yapmak istiyorum.

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



    String id,login_id;
    int pass,login_pass;
    /*KAYIT*/
    System.out.println("Kullanıcı Adınız");
    id = input.next();
    System.out.println("Şifreniz");
    pass = input.nextInt();
    /*System.out.println("Hoşgeldiniz "+" Lütfen Giriş Yapınız.");*/
    /*LOGIN*/
    System.out.println("Kullanıcı Adınız");
    login_id = input.next();
    System.out.println("Şifreniz");
    login_pass = input.nextInt();



    if (login_pass == pass && login_id.equals(id) == true)
    System.out.println("Giriş Başarılı");
    if (login_pass != pass || login_id.equals(id) == false)
    System.out.println("giriş başarısız!");
    }
    }


    "login_id.input.NextLine();" Kullandığım da program çıktısı:
    Java Scanner Sınıfı Problemi







  • nextLine() metodu input bufferı /n karakterini görene kadar okur.
    /n karakterine gelince son olarak bu karakteri de okur ve okunan karakterleri return eder.

    nextInt() metodu da aynı şekilde okur fakat tek farkı /n karakterini okumaz. Bufferda bırakır.

    Bu yüzden nextInt() uyguladıktan sonra bufferda bir /n karakteri kalır ve nextLine() ile sıradaki satırı okumak istediğinde direk bufferdaki /n karakteri görülür ve okuma yapılmaz.

    Örnek:

    Buffer: burak/n123/n


    İlk nextLine(), burak/n okur.

    Buffer: 123/n kalır

    sonra nextInt(), 123 okur.

    Buffer: /n kalır.

    Bufferda karakter olduğu için program input beklemez, buffer okumaya devam eder.

    İkinci nextLine() sonda kalan /n karakterini okur.

    Son olarak 2. nextInt()'e geldiğinde buffer boş olduğu program için input bekler.


    Bu sorunu çözmek için, sayı okunduktan sonra bufferda kalan /n karakterini silmen gerekir. Bunun için de her nextInt() metodundan sonra nextLine() uygulayarak /n karakterini bufferdan okutup silebilirsin.


    System.out.println("Şifreniz");
    pass = input.nextInt();
    input.nextLine(); // Ekle

    Veya daha doğru bir çözüm yolu şöyle olur; bütün inputlarını nextLine() ile oku, daha sonra ihtiyacın olan yerlerde integer, veya double neye çevireceksen çevirebilirsin.


    Bu arada ikinci bir Scanner objesine (input2) ihtiyacın yok.



    < Bu mesaj bu kişi tarafından değiştirildi gdb -- 27 Eylül 2017; 12:43:5 >




  • gdb G kullanıcısına yanıt
    Güncellenen Kod:
    import java.util.Scanner; 
    import java.io.*;
    public class sayilar {

    public static void main (String args[])
    {
    Scanner input = new Scanner(System.in);
    String id,login_id,pass,login_pass;

    /*KAYIT*/
    System.out.println("Kullanıcı Adınız");
    id = input.nextLine();
    System.out.println("Şifreniz");
    pass = input.nextLine();
    int pass2 = Integer.parseInt(pass);

    /*System.out.println("Hoşgeldiniz "+" Lütfen Giriş Yapınız.");*/
    /*LOGIN*/
    System.out.println("Kullanıcı Adınız");
    login_id = input.nextLine();
    System.out.println("Şifreniz");
    login_pass = input.nextLine();
    int login_pass2 = Integer.parseInt(login_pass);


    System.out.println(pass2+id+login_pass2+login_id);
    if (login_pass2 == pass2 && login_id.equals(id))
    System.out.println("Giriş Başarılı");

    else

    System.out.println("giriş başarısız!");


    }
    }

    Yorumun için teşekkür ederim bütün inputları nextLine() ile okuyup daha sonra çeviri yaptım ve problem düzeldi. Kod bloğu tamamen doğrumu bilmiyorum incelersen sevinirim. :)
    Fakat kafama takılan bir durum oldu if kontrolünde 2 adet if koyduğumda ikisinide onaylıyor. Giriş başarılı ve başarısız diye ikisinide yazıyor else kullandığım da problem olmuyor. Bunun sebebi nedir ?




  • Brosfer kullanıcısına yanıt
    Burada zaten ikinci bir if'e gerek yok. Eğer şifre ve id uyuşuyorsa "giriş başarılı", değilse (else) "başarısız" olmalı. İkinci if'i yanlış yazmışsındır büyük ihtimalle. Ne yazdığını bilmediğim için bir şey diyemem.

    Kodda herhangi bir hata yok gibi. Tek sorun hizalama bozuk. Şöyle bir şey olmalı:

     
    import java.util.Scanner;
    import java.io.*;
    public class sayilar {

    public static void main (String args[])
    {
    Scanner input = new Scanner(System.in);
    String id,login_id,pass,login_pass;

    /*KAYIT*/
    System.out.println("Kullanıcı Adınız");
    id = input.nextLine();
    System.out.println("Şifreniz");
    pass = input.nextLine();
    int pass2 = Integer.parseInt(pass);

    /*System.out.println("Hoşgeldiniz "+" Lütfen Giriş Yapınız.");*/
    /*LOGIN*/

    System.out.println("Kullanıcı Adınız");
    login_id = input.nextLine();
    System.out.println("Şifreniz");
    login_pass = input.nextLine();
    int login_pass2 = Integer.parseInt(login_pass);

    System.out.println(pass2+id+login_pass2+login_id);

    if (login_pass2 == pass2 && login_id.equals(id))
    System.out.println("Giriş Başarılı");
    else
    System.out.println("giriş başarısız!");
    }
    }




  • gdb G kullanıcısına yanıt
    Yardımın için teşekkür ederim. Java da nesne tabanlı programlama için önerebileceğin bir yer var mı ? Youtube kanalı vs gibi. Güzel bir kaynak bulamadım.
  • Brosfer kullanıcısına yanıt
    Maalesef bilmiyorum. Ben çoğunlukla okulda öğrendim. İngilizcen varsa araştırabilirim? İngilizce kaynak illaki vardır.
  • gdb G kullanıcısına yanıt
    İngilizce kaynakta olur paylaşırsan sevinirim.
  • https://www.javatpoint.com/java-oops-concepts
    https://www3.ntu.edu.sg/home/ehchua/programming/java/J3a_OOPBasics.html
    https://beginnersbook.com/2013/04/oops-concepts/

    Buradaki teorik kavramları iyice öğrendiysen; linked list, queue, stack, binary tree gibi veri yapıları tasarlayarak ve örnek çalışma soruları bakarak nesne yönelimli tasarım becerini geliştirebilirsin.

    Burada birkaç örnek var veri yapılarıyla ilgili:http://introcs.cs.princeton.edu/java/40algorithms/
    Burada da sırayla ders olarak verilmiş, hem video hem slayt hem kodlarıyla:http://datastructur.es/sp17/index.html

    Bir de şöyle bir kitap var direkt olarak javayla veri yapılarını anlatan:https://github.com/nghialunhaiha/books/blob/master/programming%20books/Java/Data%20Structures%20and%20Algorithms%20in%20Java%2C%206th%20Edition.pdf


    Fazla da kapsamlı araştıramadım, bulabildiklerim bunlar. Özellikle veri yapıları ile ilgili örnekler bulmanı tavsiye ediyorum çünkü hem bilinmesi gereken şeyler, hem de javada nesne yönelimli program örnekleri yapmak için idealler. Bir süre sonra araba, insan, hayvan classları falan sıkıyor ve anlamsızlaşıyor çünkü.




  • gdb G kullanıcısına yanıt
    Teşekkür ederim inceleyeceğim.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.