لماذا لا يسمح لي هذا من أجل إدخال النص بالدورة الأولى؟
-
06-07-2019 - |
سؤال
ما أريد القيام به هو أن أطلب من المستخدم عددًا من الأوتار لقراءة صفيف ، ثم اطلب من المستخدم إدخال هذا عدد الأوتار وقراءتها في الصفيف. عندما أقوم بتشغيل هذا الرمز ، لا يسألني أبدًا عن إدخال الدورة الأولى من أول حلقة ، فقط يطبع "String #0: String #1:" وبعد ذلك يمكنني إدخال النص. لماذا هذا وماذا فعلت خطأ؟
import java.util.Scanner;
public class ovn9
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.print("Number of inputs: ");
int lines= sc.nextInt();
String[] text=new String[lines];
for(int x=0; x<text.length; x++)
{
System.out.print("String #"+x+": ");
text[x] = sc.nextLine();
}
for(int y=0; y<text.length; y++)
System.out.println(text[y]);
}
}
المحلول
التخزين المؤقت.
nextInt()
لا تستهلك الخط الجديد في المخزن المؤقت للإدخال الذي تم وضعه هناك عند إدخال عدد المدخلات. في التكرار 0 من الحلقة ، يوجد بالفعل خط إدخال في المخزن المؤقت و nextLine()
يمكن أن يكتمل على الفور وسينتظر البرنامج خط إدخال جديد فقط في التكرار 1. لتجاهل الخط الجديد في الإدخال ، يمكنك إضافة آخر فقط nextLine()
اتصل قبل الدخول إلى حلقة.
نصائح أخرى
ربما يجب عليك تغيير حلقتك لاستخدام "sc.next ()"
for ( int x = 0; x < lines; x++ ) {
System.out.print("String #" + x + ": ");
text[x] = sc.next();
}
يمكن تفسيره بواسطة Java API
String Next (): يجد وإرجاع الرمز المميز الكامل التالي من هذا الماسح الضوئي.
String NextLine (): تقدم هذا الماسح الضوئي عبر الخط الحالي ويعيد الإدخال الذي تم تخطيه.