سؤال

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

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.nextLine();
}

والإخراج لهذا الرمز هو ما يلي:

How many names are you going to save:3 
Type a name: Type a name: John Doe
Type a name: John Lennon

لاحظ كيف تخطي إدخال الاسم الأول؟ تخطيها وذهب مستقيم لإدخال الاسم الثاني. لقد حاولت البحث عن ما يسبب ذلك لكنني لا يبدو لي أن أكون قادرا على مسمار ذلك. آمل أن يساعدني شخص ما. شكرًا

هل كانت مفيدة؟

المحلول

سبب الخطأ هو أن extint يسحب عددا صحيحا فقط، وليس الجديد. إذا قمت بإضافة a in.nextline () قبل حلقة الحلقة، فسوف تأكل السطر الجديد الفارغ والسماح لك بإدخال 3 أسماء.

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];
in.nextLine();
for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.nextLine();
}

أو مجرد قراءة الخط وتحليل القيمة كعدد صحيح.

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = Integer.parseInt(in.nextLine().trim());

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

نصائح أخرى

استخدام sc.nextline ()؛ وقتين حتى نتمكن من قراءة السطر الأخير من السلسلة

sc.nextline () sc.nextline ()

ذلك لأن in.xtint () لا يغير الخط. لذا فأنت أولا "أدخل" (بعد الضغط على 3) تسبب قراءة الإنباتوفلة من قبل الخاص بك in.nextline () في حلقة الخاص بك.

هنا تغيير صغير يمكنك القيام به:

int nnames;
    String names[];

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

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

هذا لأنه in.xTint () فقط تلقي رقم INT، لا يتلقى خطا جديدا. لذلك لديك إدخال 3 واضغط على "ENTER"، يتم قراءة نهاية السطر بواسطة in.nextline ().

هنا هو رمزي:

int nnames;
String names[];

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

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

هل يمكن استبداله ببساطة

names[i] = in.nextLine(); مع names[i] = in.next();

باستخدام التالي () سيعود فقط ما يأتي قبل المسافة. يتحرك NextLine () تلقائيا الماسح الضوئي لأسفل بعد إرجاع السطر الحالي.

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