使用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 age18
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 age18
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