سؤال

هذا السؤال لديه بالفعل إجابة هنا:

حصلت على الكود التالي:

        int nnames;
    String names[];

    System.out.print("How many names are you going to save: ");
    Scanner in = new Scanner(System.in);
    nnames = in.nextInt();
    names = new String[nnames];

    for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.next();
    }

    System.out.println(names[0]);

عندما أقوم بتشغيل هذا الرمز، سيحصل الماسح الضوئي فقط على الاسم الأول وليس الاسم الأخير. وسوف تخطى أحيانا خطا عند محاولة إدخال اسما، سيظهر كما لو كنت قد تركت الاسم فارغا وتخطا إلى الاسم التالي. أنا لا أعرف ما الذي يسبب هذا.

آمل أن يساعدني شخص ما!

تحرير: لقد حاولت in.nextline ()؛ إنه يعمل على إصلاح الأسماء الكاملة ولكنه لا يزال يبقي خطا، وهنا مثال على الإخراج:

How many names are you going to save:  3
Type a name: Type a name: John Doe
Type a name: John Lennon
هل كانت مفيدة؟

المحلول

بدلا من:

in.next();

يستخدم:

in.nextLine();

nextLine() يقرأ الأحرف حتى يجد حرف سطر جديد '\n'

نصائح أخرى

الماسح الضوئي. توقف عن القراءة عندما تصادف المحدد، وهو مساحة بيضاء. استخدم ال nextLine طريقة بدلا من ذلك.

بعد extint الأولي ()، لا يزال هناك جديد فارغ في المدخلات الخاصة بك. لذلك فقط أضف مفتاح NEXT () بعد التالي ()، ثم انتقل إلى حلقة الخاص بك:

...
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
in.nextLine(); // gets rid of the newline after number-of-names
names = new String[nnames];

for (int i = 0; i < names.length; i++){
    System.out.print("Type a name: ");
    names[i] = in.nextLine();
}
...

جرب استخدام:

System.out.println()

بدلا من:

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