扫描仪类错误
我正在做一些家庭作业,我们必须使用Scanner类。 我能够使用它来读取一个字符串,一个int和一个浮点数。 当我进入下一阶段(下面的课程)时,我突然无法像以前那样使用扫描仪。 我确实关闭了我创建和打开的任何其他扫描仪对象。 感谢您的任何帮助。
为什么这个代码:(nextLine()也不起作用)
import java.io.*;
import java.util.Scanner;
public class Grades {
private int len;
private String [] gradeNames;
private int [] gradeArray;
private int enterGradeNames(){
Scanner input = null;
input = new Scanner(System.in);
for (int i = 0; i < len; ++i){
System.out.println("Enter the type of grades you will be reporting: (" +
(i + 1) + " of " + gradeArray.length + ")" );
gradeNames[i] = new String(input.next() );
}
input.close();
return 0;
}
protected int displayGradeNames(){
System.out.println("Type of Grades tracking");
for (int i = 0; i < len; ++i)
System.out.println(gradeNames[i]);
return 0;
};
public Grades(){
len = 0;
Scanner input = null;
input = new Scanner(System.in);
System.out.println("Enter the size of the grade array to be created");
len = 4;
gradeArray = new int[len];
gradeNames = new String[len];
input.close();
enterGradeNames();
}
}
给我这个错误:
输入您将要报告的成绩类型:(1 of 4)
线程“main”java.util.NoSuchElementException中的异常
在java.util.Scanner.throwFor(未知源)
在java.util.Scanner.next(未知源)
在Grades.enterGradeNames(Grades.java:14)
在Grades。(Grades.java:34)
在Demo1.main(Demo1.java:32)
**哦,我应该提到的是,它甚至没有在抛出错误之前给出输入数据的选项
问题出在你的enterGradeNames()
方法中:
input.next()
你必须先调用input.hasNext()
;
从文档:
抛出:NoSuchElementException - 如果没有更多的标记可用。
编辑:根据意见
我无法重现该问题,但代码中有许多不必要的行,因此请尝试运行此编辑的代码并查看它是否更改了任何内容。
public class Grades {
private int len;
private String [] gradeNames;
private int [] gradeArray;
private int enterGradeNames(){
Scanner input = new Scanner(System.in);
for (int i = 0; i < len; i++){
System.out.println("Enter the type of grades you will be reporting: (" +
(i + 1) + " of " + gradeArray.length + ")" );
gradeNames[i] = new String(input.next());
}
return 0;
}
public Grades(int length){
this.len = length;
gradeArray = new int[len];
gradeNames = new String[len];
}
在构造函数中调用非静态方法通常不是很好的选择,因为对象还没有完成。 你可以在(工厂)方法中做到这一点:
public static Grades buildGrades(){
Scanner s = new Scanner(System.in);
System.out.println("Enter size:");
int size = s.nextInt();
Grades grades = new Grades(size);
grades.enterGradeNames();
return grades;
}
EDIT2:
我搜索了一下,这个问题可能与您关闭Scanner
。 因为如果您在Scanner
上调用close,它会查看它的流是否实现Closeable
,如果是,它也会关闭它。 我从来没有想过System.in
是可以关闭的,但它是。
所以最好的选择? 可能为整个程序使用一个Scanner
,或者如果您不希望其流关闭,请不要关闭它。 更多可以在这里阅读。
试试这个:
public Grades(){
len = 0;
Scanner input = null;
input = new Scanner(System.in);
System.out.println("Enter the size of the grade array to be created");
len = 4;
gradeArray = new int[len];
gradeNames = new String[len];
enterGradeNames();
input.close();
}
我从你的“Grades”构造函数中删除了输入参考,因为它没有用处两次(在enterGradeNames中你再次启动它)。 问题是你关闭了构造函数的资源,然后试图重新创建它。
public Grades(){
len = 0;
System.out.println("Enter the size of the grade array to be created");
len = 4;
gradeArray = new int[len];
gradeNames = new String[len];
enterGradeNames();
}
链接地址: http://www.djcxy.com/p/96091.html
上一篇: Scanner Class Error