Arama butonu
Bu konudaki kullanıcılar: 1 misafir
8
Cevap
2915
Tıklama
0
Öne Çıkarma
Java Scanner Sınıfı Problemi
B
9 yıl (190 mesaj)
Teğmen
Konu Sahibi

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ı:
< Resime gitmek için tıklayın >

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



G
9 yıl (144 mesaj)
Teğmen

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 >
Bu mesaja 1 cevap geldi.
B
9 yıl (190 mesaj)
Teğmen
Konu Sahibi

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 ?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @gdb
G
9 yıl (144 mesaj)
Teğmen

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!");
}
}


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Brosfer
B
9 yıl (190 mesaj)
Teğmen
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @gdb
G
9 yıl (144 mesaj)
Teğmen

Maalesef bilmiyorum. Ben çoğunlukla okulda öğrendim. İngilizcen varsa araştırabilirim? İngilizce kaynak illaki vardır.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Brosfer
B
9 yıl (190 mesaj)
Teğmen
Konu Sahibi

İngilizce kaynakta olur paylaşırsan sevinirim.




Bu mesajda bahsedilenler: @gdb
G
9 yıl (144 mesaj)
Teğmen

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ü.


Bu mesaja 1 cevap geldi.
B
9 yıl (190 mesaj)
Teğmen
Konu Sahibi

Teşekkür ederim inceleyeceğim.




Bu mesajda bahsedilenler: @gdb
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.