لماذا لا يسمح لي هذا من أجل إدخال النص بالدورة الأولى؟

StackOverflow https://stackoverflow.com/questions/1815396

سؤال

ما أريد القيام به هو أن أطلب من المستخدم عددًا من الأوتار لقراءة صفيف ، ثم اطلب من المستخدم إدخال هذا عدد الأوتار وقراءتها في الصفيف. عندما أقوم بتشغيل هذا الرمز ، لا يسألني أبدًا عن إدخال الدورة الأولى من أول حلقة ، فقط يطبع "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 (): تقدم هذا الماسح الضوئي عبر الخط الحالي ويعيد الإدخال الذي تم تخطيه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top