java.util.Scanner'dan nextLine() yöntemini kullanmaya çalışırken sorun yaşıyorum.
İşte denediğim şey:
import java.util.Scanner;
class TestRevised {
public void menu() {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a sentence:\t");
String sentence = scanner.nextLine();
System.out.print("Enter an index:\t");
int index = scanner.nextInt();
System.out.println("\nYour sentence:\t" + sentence);
System.out.println("Your index:\t" + index);
}
}
Örnek #1: Bu örnek amaçlandığı gibi çalışır. String sentence = scanner.nextLine();satırı,
System.out.print("Enter an index:\t");` ile devam etmeden önce girilecek girdiyi bekler.
Bu çıktı üretir:
Enter a sentence: Hello.
Enter an index: 0
Your sentence: Hello.
Your index: 0
// Example #2
import java.util.Scanner;
class Test {
public void menu() {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("\nMenu Options\n");
System.out.println("(1) - do this");
System.out.println("(2) - quit");
System.out.print("Please enter your selection:\t");
int selection = scanner.nextInt();
if (selection == 1) {
System.out.print("Enter a sentence:\t");
String sentence = scanner.nextLine();
System.out.print("Enter an index:\t");
int index = scanner.nextInt();
System.out.println("\nYour sentence:\t" + sentence);
System.out.println("Your index:\t" + index);
}
else if (selection == 2) {
break;
}
}
}
}
Örnek #2: Bu örnek amaçlandığı gibi çalışmamaktadır. Bu örnek, kullanıcının ne yapacağını seçmesine izin vermek için bir while döngüsü ve if - else yapısı kullanır. Program String sentence = scanner.nextLine();
satırına geldiğinde girdi beklemez, bunun yerine System.out.print("Enter an index:\t");
satırını çalıştırır.
Bu çıktı üretir:
Menu Options
(1) - do this
(2) - quit
Please enter your selection: 1
Enter a sentence: Enter an index:
Bu da bir cümle kurmayı imkansız hale getiriyor.
2 numaralı örnek neden amaçlandığı gibi çalışmıyor? Örnek 1 ve 2 arasındaki tek fark, Örnek 2'nin bir while döngüsüne ve bir if-else yapısına sahip olmasıdır. Bunun scanner.nextInt()'in davranışını neden etkilediğini anlamıyorum.
Sanırım senin sorunun
int selection = scanner.nextInt();
sadece numarayı okur, satır sonunu veya numaradan sonraki herhangi bir şeyi okumaz. Beyan ettiğinizde
String sentence = scanner.nextLine();
Bu, üzerinde numara bulunan satırın kalanını okur (numaradan sonra hiçbir şey olmadığından şüpheleniyorum)
Satırın geri kalanını yok saymak istiyorsanız, her nextInt() işlevinden sonra bir scanner.nextLine(); yerleştirmeyi deneyin.
Bir şeyi her okumak istediğinizde fazladan bir scanner.nextLine()
yerleştirmek yerine, her girdiyi yeni bir satırda kabul etmek istediğiniz anlaşıldığından, sınırlayıcıyı aslında yalnızca yeni satırlarla eşleşecek şekilde değiştirmek isteyebilirsiniz (varsayılan olarak herhangi bir boşluk yerine)
import java.util.Scanner;
class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\\n");
System.out.print("Enter an index: ");
int index = scanner.nextInt();
System.out.print("Enter a sentence: ");
String sentence = scanner.next();
System.out.println("\nYour sentence: " + sentence);
System.out.println("Your index: " + index);
}
}
Bu nedenle, bir girdi satırını okumak için yalnızca next{Int, Double, ...} ile sınırlayıcı açısından aynı davranışa sahip olan scanner.next()
işlevine ihtiyacınız vardır.
Her seferinde "nextLine()" yaklaşımından farkı, ikincisinin <space>3
, 3<space>
ve 3<space>whatever
dizinlerini de kabul ederken, birincisinin yalnızca 3
dizinini kabul etmesidir