it-swarm.dev

كيف تقرأ السلاسل من ماسحة ضوئية في تطبيق وحدة جافا؟

import Java.util.Scanner;
class MyClass
{
    public static void main(String args[])
    {
        Scanner scanner = new Scanner(System.in);
        int employeeId, supervisorId;
        String name;
        System.out.println("Enter employee ID:");
        employeeId = scanner.nextInt();
        System.out.println("Enter employee name:");
        name = scanner.next();
        System.out.println("Enter supervisor ID:");
        supervisorId = scanner.nextInt();
    }
}

حصلت على هذا الاستثناء أثناء محاولة إدخال الاسم الأول واسم العائلة.

Enter employee ID:
101
Enter employee name:
firstname lastname
Enter supervisor ID:
Exception in thread "main" Java.util.InputMismatchException
    at Java.util.Scanner.throwFor(Unknown Source)
    at Java.util.Scanner.next(Unknown Source)
    at Java.util.Scanner.nextInt(Unknown Source)
    at Java.util.Scanner.nextInt(Unknown Source)
    at com.controller.Menu.<init>(Menu.Java:61)
    at com.tests.Employeetest.main(Employeetest.Java:17)

ولكن العمل عليها إذا أدخلت فقط الاسم الأول.

Enter employee ID:
105
Enter employee name:
name
Enter supervisor ID:
501

ما أريده هو قراءة السلسلة الكاملة سواء تم تقديمها كـ name أو كـ firstname lastname. ما هي المشكلة هنا؟

13
09Q71AO534
Scanner scanner = new Scanner(System.in);
int employeeId, supervisorId;
String name;
System.out.println("Enter employee ID:");
employeeId = scanner.nextInt();
scanner.nextLine(); //This is needed to pick up the new line
System.out.println("Enter employee name:");
name = scanner.nextLine();
System.out.println("Enter supervisor ID:");
supervisorId = scanner.nextInt();

كان الاتصال بـ nextInt() مشكلة لأنه لم يلتقط السطر الجديد (عند الضغط على enter). لذلك ، استدعاء scanner.nextLine() بعد ذلك العمل.

23
Sajal Dutta

ما يمكنك القيام به هو استخدام المحدد كخط جديد. حتى تضغط مفتاح الإدخال ، ستكون قادرًا على قراءته كسلسلة.

Scanner sc = new Scanner(System.in);
sc.useDelimiter(System.getProperty("line.separator"));

أتمنى أن يساعدك هذا.

1
blganesh101

يحل محل:

System.out.println("Enter EmployeeName:");
                 ename=(scanner.next());

مع:

System.out.println("Enter EmployeeName:");
                 ename=(scanner.nextLine());

وهذا بسبب أن العنوان التالي () يمسك الرمز المميز فقط ، ويعمل الفضاء كمحدد بين الرموز المميزة. يعني هذا أن الماسح الضوئي يقرأ المدخلات: "اسم العائلة واسم العائلة" كرمزين منفصلين. لذلك ، في المثال الخاص بك ، سيتم تعيين ename على الاسم بينما يحاول الماسح الضوئي تعيين المشرف على اسم العائلة

1
Marco Corona

أنت تدخل قيمة فارغة إلى nextInt ، وسوف تفشل إذا أعطيت قيمة فارغة ...

لقد أضفت فحصًا فارغًا إلى جزء التعليمات البرمجية

جرب هذا الكود:

import Java.util.Scanner;
class MyClass
{
     public static void main(String args[]){

                Scanner scanner = new Scanner(System.in);
                int eid,sid;
                String ename;
                System.out.println("Enter Employeeid:");
                     eid=(scanner.nextInt());
                System.out.println("Enter EmployeeName:");
                     ename=(scanner.next());
                System.out.println("Enter SupervisiorId:");
                    if(scanner.nextLine()!=null&&scanner.nextLine()!=""){//null check
                     sid=scanner.nextInt();
                     }//null check
        }
}
0
Fr_nkenstien