باستخدام الماسح الضوئي.التالي() للحصول على إدخال النص

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

  •  21-08-2019
  •  | 
  •  

سؤال

أنا أحاول أن أحصل على نص الإدخال من لوحة المفاتيح في جافا 6.أنا جديدة على اللغة و كلما قمت بتشغيل التعليمات البرمجية التالية أحصل على هذا الخطأ:

package test1;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
    boolean quit = false;
    while (!quit){
        Scanner keyIn;
        String c = "x";
        while (c != "y" && c != "n") {
            keyIn = new Scanner(System.in);
            c = keyIn.next();
            keyIn.close();
        }
        if (c == "n")
            quit = true;
    }
 }
}


Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:838)
at java.util.Scanner.next(Scanner.java:1347)
at test1.Test.main(Test.java:11)

أنا سوء استخدام التالي() الأسلوب ؟ اعتقدت انه سيكون انتظر إدخال المستخدم ولكن يبدو أنه ليس ورمي الاستثناء تقول أنه لا يوجد شيء ترك في الماسح الضوئي.

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

المحلول

وسبب الاستثناء الذي تتصل keyIn.close() بعد استخدام الماسح الضوئي مرة واحدة، والذي يغلق Scanner فحسب، بل أيضا System.in. التكرار التالي جدا يمكنك إنشاء Scanner الجديدة التي تهب على وجه السرعة تصل لإغلاق System.in الآن. لإصلاح ذلك، ما عليك القيام به هو فقط إنشاء الماسح الضوئي مرة واحدة قبل أن تدخل حلقة while، وتخطي الدعوة close() تماما منذ كنت لا تريد إغلاق System.in.

وبعد تحديد أن البرنامج ما زال لا يعمل بسبب == و!= مقارنات السلسلة تفعله. عند مقارنة السلاسل في جافا يجب استخدام equals() لمقارنة محتويات السلسلة. عند استخدام == و!= كنت مقارنة المراجع الكائن، وبالتالي فإن هذه المقارنات سيعود دائما كاذبة في التعليمات البرمجية. استخدم دوما equals() لمقارنة السلاسل.

while (!quit){
    Scanner keyIn = new Scanner(System.in);
    String c = "x";
    while (!c.equals("y") && !c.equals("n")) {
        c = keyIn.next();
    }
    if (c.equals("n"))
        quit = true;
}

نصائح أخرى

لتقييم السلاسل لديك لاستخدام .equals

وحين (! c.equals ( "ص")) {فعل الاشياء ...

  • تعلن الماسح الضوئي مرجعية خارج الحلقات الخاصة بك.ليس لديك لإنشاء وإغلاقه في كل مرة.

  • قارن سلسلة نصية مع الطريقة equals, وليس مع المشغل ==.

وحاول استخدام nextLine () وتبحث فقط في العنصر الأول في السلسلة التي تم إرجاعها.

وو! = و== سوف تعمل فقط عند استخدامها ضد شخصيات أو أنواع البدائية الأخرى، التي من شأنها أن تعمل فقط في ج #. سوف تحتاج إلى استخدام .equals لضمان كنت التحقق من وجود المساواة المناسبة.

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