使用Java输入时,Scanner类和解决方案异常

请看以下代码,

import java.util.*;

public class test {

    public static void main(String args[]) {

      c1 obj1 = new c1();

      obj1.input();

      c2 obj2 = new c2();

      obj2.input();

    }

}

class c1

{

    int age;

    String name;

    

    void input()

    {

        Scanner in = new Scanner(System.in);

        System.out.println("Enter age");

        age = in.nextInt();

        System.out.println("Enter name");

        name = in.next();

        System.out.println("Name: " + name + " Age: "+ age);

    }

}

class c2

{

    float perc;

    String id;

    

    void input()

    {

        Scanner in = new Scanner(System.in);

        System.out.println("Enter percentage");

        perc = in.nextFloat();

        System.out.println("Enter ID");

        id = in.next();

        System.out.println("Id: "+ id + " Percentage: "+ perc);

        

    }

}

该代码编译没有错误,并且似乎不会引起任何问题。如果只接受任何一个类中的输入,即调用obj1.input()或obj2.input(),则该程序将完美运行。但是,在我们调用两个类的输入函数的情况下,如图所示,我们在运行时得到以下输出。

输出结果

Enter age

18

Enter name

abc

Name: abc Age: 18

Enter percentage

Exception in thread "main" java.util.NoSuchElementException

at java.base/java.util.Scanner.throwFor(Scanner.java:937)

at java.base/java.util.Scanner.next(Scanner.java:1594)

at java.base/java.util.Scanner.nextFloat(Scanner.java:2496)

at c2.input(test.java:37)

at test.main(test.java:8)

我们看到第一个输入[obj1.input()]可以正常工作,但在第二个类中进行输入时却出错。如果我们交换调用这两个函数的顺序,我们将能够在第二类而不是第一类中接受输入。我们观察到,在多个类中使用Scanner对象时,总是会出错。这是因为Scanner类的第一个对象在输入流上进行了锁定。即使我们使用close()Scanner类的方法,也仍然会收到错误,因为流被Scanner类的第一个对象锁定了。

解决该问题的方法是指定一个单独的类来处理所有输入操作。请看以下对我们程序的更新。

import java.util.*;

public class test {

    public static void main(String args[]) {

      c1 obj1 = new c1();

      obj1.input();

      c2 obj2 = new c2();

      obj2.input();

    }

}

class c1

{

    int age;

    String name;

    

    void input()

    {

        System.out.println("Enter age");

        age = inputclass.in.nextInt();

        System.out.println("Enter name");

        name = inputclass.in.next();

        System.out.println("Name: " + name + " Age: "+ age);

    }

}

class c2

{

    float perc;

    String id;

    

    void input()

    {

        System.out.println("Enter percentage");

        perc = inputclass.in.nextFloat();

        System.out.println("Enter ID");

        id = inputclass.in.next();

        System.out.println("Id: "+ id + " Percentage: "+ perc);

        

    }

}

class inputclass

{

    static Scanner in = new Scanner(System.in);

}

输出结果

Enter age

18

Enter name

abc

Name: abc Age: 18

Enter percentage

89.1

Enter ID

AD101

Id: AD101 Percentage: 89.1

以上是 使用Java输入时,Scanner类和解决方案异常 的全部内容, 来源链接: utcz.com/z/356702.html

回到顶部