ما تتم مناقشته هنا يدور حول الطريقة التالية وطريقة nextLine في فئة الماسح الضوئي Java. ما هي طرق next() و nextLine()؟
تحدث المشكلة:
دعونا نلقي نظرة على الكود التالي أولاً: إدخال وإخراج بسيط لوحدة التحكم:
عرض نسخة عادية إلى الحافظة؟
الحزمة cn.nileader.app.vi؛
استيراد java.util.Scanner؛
اختبار الطبقة العامة {
public static void main(String[] args) يطرح الاستثناء {
الماسح الضوئي cin = new Scanner(System.in);
String ni = cin.nextLine();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
ني = cin.nextLine();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
}
}
الحزمة cn.nileader.app.vi؛
استيراد java.util.Scanner؛
اختبار الطبقة العامة {
public static void main(String[] args) يطرح الاستثناء {
الماسح الضوئي cin = new Scanner(System.in);
String ni = cin.nextLine();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
ني = cin.nextLine();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
}
}
انظر إلى الكود التالي مرة أخرى:
عرض نسخة عادية إلى الحافظة؟
الحزمة cn.nileader.app.vi؛
استيراد java.util.Scanner؛
اختبار الطبقة العامة {
public static void main(String[] args) يطرح الاستثناء {
الماسح الضوئي cin = new Scanner(System.in);
سلسلة ني = cin.next();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
ني = cin.next();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
}
}
الحزمة cn.nileader.app.vi؛
استيراد java.util.Scanner؛
اختبار الطبقة العامة {
public static void main(String[] args) يطرح الاستثناء {
الماسح الضوئي cin = new Scanner(System.in);
سلسلة ني = cin.next();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
ني = cin.next();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
}
}
مقتطفات التعليمات البرمجية أعلاه كلها صحيحة ومملة.
الشيء الرائع قادم..
قم بتشغيل الكود التالي:
عرض نسخة عادية إلى الحافظة؟
الحزمة cn.nileader.app.vi؛
استيراد java.util.Scanner؛
اختبار الطبقة العامة {
public static void main(String[] args) يطرح الاستثناء {
الماسح الضوئي cin = new Scanner(System.in);
سلسلة ني = cin.next();
System.out.println("استخدام الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو هو: "+ni+" والطول هو "+ni.length());
ني = cin.nextLine();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
}
}
الحزمة cn.nileader.app.vi؛
استيراد java.util.Scanner؛
اختبار الطبقة العامة {
public static void main(String[] args) يطرح الاستثناء {
الماسح الضوئي cin = new Scanner(System.in);
سلسلة ني = cin.next();
System.out.println("استخدام الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو هو: "+ni+" والطول هو "+ni.length());
ني = cin.nextLine();
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
}
}
نتائج التشغيل هي كما يلي:
صاحب متجر
استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: ni shopkeeper، الطول هو 4
استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: الطول هو 0
لقد انتهى الأمر، عندما يتم استخدام طريقتي next وnextLine في Java Scanner معًا،
ليس لديك فرصة لدخول السلسلة الثانية! ! !
تحليل المشكلة:
الفرق الواضح بين الطريقة التالية والطريقة التالية هو أن الأولى تقرأ "قطعة" من الأحرف، بينما تقرأ الأخيرة سطرًا من السلاسل.
ببساطة، سبب الظاهرة المذكورة أعلاه يرجع بشكل أساسي إلى عدم مسؤولية الطريقة التالية ().
كيف تعمل الطريقة التالية () : (بشكل سطحي)
قم بالمسح الضوئي من سطر حتى تجد معرفًا محددًا: مسافة أو حرف السطر الجديد (n)، واحصل على الحرف (السلسلة) قبله.
انظر هنا، الطريقة الأولى التالية () تقرأ "ni shopkeeper"، لكنها لا تقرأ "n"، كما أنها ليست مسؤولة عن فواصل الأسطر، ثم ترمي "n" إلى nextLine() للمعالجة.
كما تعلم، ينتمي nextLine() إلى نوع "رؤية الأموال" الذي يقبل "n" عندما يراه، ثم يقوم بمسح المحتوى قبل n، وهو عبارة عن سلسلة فارغة. ثم حدث خطأ ما.
حل المشكلة:
عرض نسخة عادية إلى الحافظة؟
الحزمة cn.nileader.app.vi؛
استيراد java.util.Scanner؛
اختبار الطبقة العامة {
public static void main(String[] args) يطرح الاستثناء {
الماسح الضوئي cin = new Scanner(System.in);
سلسلة ني = cin.next();
System.out.println("استخدام الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو هو: "+ni+" والطول هو "+ni.length());
بينما((ni = cin.nextLine()).equals("") ){}
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
}
}
الحزمة cn.nileader.app.vi؛
استيراد java.util.Scanner؛
اختبار الطبقة العامة {
public static void main(String[] args) يطرح الاستثناء {
الماسح الضوئي cin = new Scanner(System.in);
سلسلة ني = cin.next();
System.out.println("استخدام الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو هو: "+ni+" والطول هو "+ni.length());
بينما((ni = cin.nextLine()).equals("") ){}
System.out.print("استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: "+ni+" والطول هو "+ni.length());
}
}
نتائج التشغيل:
صاحب متجر
استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: ni shopkeeper، الطول هو 4
هو عبقري
استخدم الطريقة التالية () لفئة الماسح الضوئي لتلقي السلسلة التي أدخلتها للتو: إنه عبقري وطوله 4
ضع cin.nextLine() الأصلي الثاني
التغيير إلى while( (ni = cin.nextLine()).equals("") ){}
بهذه الطريقة يمكن التخلص من تأثير "n" في السطر السابق.