我正在做一个学校的项目。
我试图收集数据从一个. txt文件与扫描仪
但我得到一个错误,当我想使用扫描仪
启动变量。
File etudiant = new File("./data/etudiants.txt");
File personnel = new File("./data/personnel.txt");
Scanner scEtudiant = new Scanner(etudiant);
Scanner scPersonnel = new Scanner(personnel);
//creation liste etudiant
while (scEtudiant.hasNextLine()) {
int num = scEtudiant.nextInt();
String nom = scEtudiant.next();
String prenom = scEtudiant.next();
String telephone = scEtudiant.next();
String email = scEtudiant.next();
int annee = scEtudiant.nextInt();
individuListe.put(num, new Etudiant(num, nom, prenom, telephone, email, annee));
}
scEtudiant.close();
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.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at gestion.Gala.<init>(Gala.java:37)
at gestion.Main.main(Main.java:7)
如果我删除变量并放置一些System.out.println()
,它会正确显示数据,但仍会输出此错误。
错误输出/堆栈跟踪显示调用扫描仪。nextInt()
导致了NoTouchElementException
。请参阅代码的第37行,其中调用了nextInt()
,可能是以下两种情况之一:
int num=scEtudiant.nextInt();
int annee=scEtudiant.nextInt();
此异常由allnext.引发。。()
类中的方法Scanner
。它表示在扫描的文本流中未找到预期的下一个标记(此处为数字类型Int
)。
请参阅nextInt()
的JavaDoc以了解抛出说明:
投掷:
如果下一个标记不匹配整数正则表达式,或者超出范围
如果输入已耗尽
非法状态异常
-如果此扫描仪已关闭
为了防止调用
Next...()
方法时出现此异常,您可以使用hasNext()
,hasNext...()
或hasNextLine()
谓词方法测试下一个元素的存在。
另见:
Baeldung教程:Java扫描器hasNext()与hasNextLine()之比较
使用
hasnetint()
测试是否存在类型为int
的下一个元素,依此类推。
while (scEtudiant.hasNextLine()) { // each student record on a new line
if (!scEtudiant.hasNextInt()) { // guard breaks loop if no int
break;
}
int num = scEtudiant.nextInt();
if (!scEtudiant.hasNext()) { // guard breaks loop if no String
break;
}
String nom = scEtudiant.next();
if (!scEtudiant.hasNext()) { // guard breaks loop if no String
break;
}
String prenom = scEtudiant.next();
String telephone = ""; // not available, default to empty
if (scEtudiant.hasNext()) { // optional: if string available
telephone = scEtudiant.next();
}
String email = ""; // not available, default to empty
if (scEtudiant.hasNext()) { // optional: if string available
email = scEtudiant.next();
}
if (!scEtudiant.hasNextInt()) { // guard breaks loop if no int
break;
}
int annee = scEtudiant.nextInt();
var etudiant = new Etudiant(num, nom, prenom, telephone, email, annee)
individuListe.put(etudiant.getNum(), etudiant);
}
将而
循环条件更改为scEtudiant.hasNextInt()
?
通常在相应的nextXXX
方法之前使用Scanner
的hastnextxxx
方法。
由于这个原因,您没有共享整个类
,我不能肯定地说,但可以猜测,您没有将默认
值赋予的
循环。所以你应该做的是,首先在函数外面声明它们,给它们默认值,然后在循环的时候在基元变量
,而里面使用它
问题内容: 我的Java作业有问题。我遇到了意外的异常,特别是: java.util.NoSuchElementException:找不到行 我正在使用,该程序不断读取任何内容,并重复“无效格式”异常文本。如果输入正确的值,则第一部分通过,然后该部分立即进入此异常。如果输入的值不正确,则它将开始循环异常。 这是我的代码: 问题答案: 您关闭了多个库,这些库关闭了底层库,因此另一个库将不再从同一库和
问题内容: 使用Scanner类中的useDelimiter时遇到一些问题。 如果我有这个输入 美国广播公司 输出将是 AB 然后等到我键入另一个“-”以打印出最后一个字符 但是,如果我没有用户输入数据,而是将字符串插入到Scanner中,则代码将起作用。原因是什么?如何解决?我不想使用StringTokenzier 问题答案: 如果没有等待您输入另一个,则将错误地假定您已完成输入。 我的意思是,
我做了一个程序,要求3个整数来输出三角形的类型。所有内容都成功运行和编译,但是,在要求用户查看是否要再次循环的部分,联机编译器会输出错误: 异常线程"main"java.util.NoSuchElement异常在java.util.Scanner.throwFor(Scanner.java:838)在java.util.Scanner.next(Scanner.java:1347)在Assignm
我是java新手,我的任务是使用扫描器读取数组,并在另一种方法中读取int。 我正在做的是计算一只兔子到达河对岸所需的最小跳跃次数。数组中的int表示从河的一边开始的石头的距离,另一个int表示石头的数量。兔子能跳的最远距离是50。 对于输入和输出: 输入n:7(输入,河中的石头数)32 46 70 85 96 123 145(输入,石头与起点之间的距离,最后一个数字是河的宽度,即目的地(河对岸)
嗨,我正在编写一个程序,它使用Scanner从用户那里获取输入,然后使用布尔方法检查输入的长度是否不超过六个字符。问题是,如果长度小于六个,我使用了while循环来不断请求输入;但是在第一次错误输入后,如果你插入一串六个字母或更长的字符串,循环仍然会继续。这是程序: 谢谢
位于java.util.scanner.throwfor(未知源)位于java.util.scanner.next(未知源)的线程“main”java.util.NoSuchelementException中出现异常**** 我多次调用s(扫描器),在第二次调用时出现运行时错误。这是由于关闭扫描仪,并可能再次使用它。我的问题是,每次使用Scanner时,我都会创建一个新的Scanner实例,那么为