提问人:JoubasaurusREX 提问时间:7/4/2023 最后编辑:JoubasaurusREX 更新时间:7/4/2023 访问量:83
Java input.next() 异常
Java input.next() exception
问:
我有以下代码:
import java.util.Scanner;
import java.io.Serializable;
import java.io.*;
public class Application implements Serializable{
private static Scanner input;
public static void openInput()
{
try
{
input = new Scanner(new File("postings.txt"));
input.useDelimiter("[,\\n\\r]");
System.out.println("File opened(message1)");
}
catch(IOException ioe)
{
System.out.println("File has not opened" + ioe);
System.exit(1);
}
System.out.println("File opened (message 2)");
}
public static void closeInput()
{
input.close();
System.out.println();
}
public static void application()
{
Media[] arr = new Media[25];
char type;
String id, author;
int views, likes, rebeeps, duration, shares;
int numObjects = 0;
while(input.hasNext())
{
id = input.next();
type = id.charAt(1);
author = input.next();
views = input.nextInt();
if (type == 'B')
{
rebeeps = input.nextInt();
likes = input.nextInt();
arr[numObjects++] = new Beeper(type+id,author,views,rebeeps,likes);
}
else if(type == 'D')
{
duration = input.nextInt();
shares = input.nextInt();
arr[numObjects++] = new DingDong(type+id,author,views,duration,shares);
}
else
{
System.out.println("Incorrect code: " + arr[numObjects]);
}
}
System.out.println("List of postings");
for(int i = 0; i <= numObjects; numObjects++)
{
System.out.println(arr[numObjects]);
}
System.out.println("Scores of postings");
for(int i = 0; i<= numObjects; numObjects++)
{
System.out.printf("%-8%7.2f",arr[numObjects].getID() + arr[numObjects].getAuthor() + arr[numObjects].calculateScore());
}
System.out.printf("%-8%7.2f",arr[numObjects].getID() + arr[numObjects].author + arr[numObjects]);
}
public static void main(String[] args)
{
openInput();
application();
closeInput();
}
}
我有三个类:一个超类和两个子类 超类:媒体 子类:叮咚、蜂鸣器
我正在尝试从文本文件中获取信息,例如: D123456,JohnD,28123,154,8045
并根据其特定类将其保存到数组中,但是当我运行Application时出现以下异常:
File opened(message1)
File opened (message 2)
Incorrect code: null
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
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 Application.application(Application.java:44)
at Application.main(Application.java:82)
类 Application 代码中的变量与超类和子类中的变量类型相同且正确。 请帮忙!
答:
0赞
WJS
7/4/2023
#1
将输入分隔符更改为
input.useDelimiter("[,\n\r]+");
回车符和换行符有时可以一起使用来表示行尾,因此您需要使用加号来根据需要使用任意数量的字符类。
并更改为因为第一个字符开始于type = id.charAt(1);
type = id.charAt(0);
0
更新
我相信问题在于,如果您收到无效代码,则没有读取额外的值,因此它们处于混乱状态。执行以下操作可能会有所帮助,但这取决于在找不到类型时是否存在这些额外值。
if (type == 'B') {
rebeeps = input.nextInt();
likes = input.nextInt();
} else if (type == 'D') {
duration = input.nextInt();
shares = input.nextInt();
} else {
input.next(); // remove the lasts two values from the line
input.next();
System.out.println("Incorrect code:");
}
另一种解决方案是读取一行,然后使用逗号和/或空格作为分隔符在该行上拆分。在这种情况下,如果输入中有任何错误,则忽略该行。
while (input.hasNextLine()) {
String line = input.nextLine();
String[] tokens = line.split("[,\\s]+");
if (tokens.length != 5) {
// print error message and take action (continue loop)
continue; // continue loop
} else {
id = tokens[0];
type = id.charAt(0);
author = tokens[1];
views = Integer.parseInt(tokens[2]);
if (type == 'B') {
rebeeps = Integer.parseInt(tokens[3]);
likes = Integer.parseInt(tokens[4]);
} else if (type == 'D') {
duration = Integer.parseInt(tokens[3]);
shares = Integer.parseInt(tokens[4]);
} else {
System.out.println("Incorrect code:");
}
}
评论
0赞
JoubasaurusREX
7/4/2023
谢谢!我改变了你说的话,但它仍然给了我同样的例外。
0赞
WJS
7/4/2023
您能否只发布带有一些数据的解析部分,而不是任何对象创建等。即读入它,将其分配给变量,然后继续。并请包含不止一行您的输入。请注意,如果一位数据乱序(即将字符串交换为 int),则会出现此错误。我确实测试了该分隔符,它适用于您的数据示例的重复行。我假设你的台词中没有空格。如果您使用句点而不是逗号,您也会收到该错误。
0赞
JoubasaurusREX
7/4/2023
那行了,谢谢你的帮助!
上一个:尝试打印某些值时未处理的异常
下一个:尝试矩阵乘法时出现异常错误
评论