Java 从文件中读取交替数据类型
我正在尝试将坐标从文件读入数组 每个坐标都有一个id、一个Java 从文件中读取交替数据类型,java,java.util.scanner,Java,Java.util.scanner,我正在尝试将坐标从文件读入数组 每个坐标都有一个id、一个x值和一个y值 该文件的格式如下:id position.x position.y 示例: 292961234 1376.42 618.056 29535583 3525.73 530.522 256351971 836.003 3563.33 20992560 4179.74 3074.27 Exception in thread "main" java.util.InputMismatchException at java.
x值
和一个y值
该文件的格式如下:id position.x position.y
示例:
292961234 1376.42 618.056
29535583 3525.73 530.522
256351971 836.003 3563.33
20992560 4179.74 3074.27
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.nextDouble(Scanner.java:2564)
at ......NodeList.getNodes(NodeList.java:40)
at ......NodeList.<init>(NodeList.java:9)
at ......NodeList.main(NodeList.java:47)
Process finished with exit code 1
注:共有4行包含4个坐标
我创建了类节点
,它的构造函数需要(int-id,双x,双y)
这是类NodeList,它应该有一个保存节点的数组属性:
包。。。。。;
导入java.io.File;
导入java.util.Iterator;
导入java.util.Locale;
导入java.util.Scanner;
公共类节点列表实现了Iterable{
私有节点[]节点=getNodes();
@凌驾
公共迭代器迭代器(){
返回null;
}
公共节点[]获取节点(){
节点[]结果;
文件f;
扫描仪;
试一试{
f=新文件(“nodes.txt”);
扫描器s=新扫描器(f);
int ctr=0;
而(s.hasNextLine()){
ctr++;
s、 nextLine();
}
结果=新节点[ctr];
}
捕获(例外e){
返回null;
}
试一试{
扫描器=新扫描器(f);
}
捕获(例外e){
返回null;
}
setDefault(新语言环境(“C”));
for(int i=0;i
节点
类:
包。。。;
公共类节点{
私有int-id;
私人双x;
私人双y;
公共节点(int-id,双x,双y){
this.id=id;
这个.x=x;
这个。y=y;
}
公共int getId(){
返回id;
}
公共双getX(){
返回x;
}
公共双盖{
返回y;
}
}
当调用包含所示代码的方法时,我得到以下结果
例外情况:
292961234 1376.42 618.056
29535583 3525.73 530.522
256351971 836.003 3563.33
20992560 4179.74 3074.27
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.nextDouble(Scanner.java:2564)
at ......NodeList.getNodes(NodeList.java:40)
at ......NodeList.<init>(NodeList.java:9)
at ......NodeList.main(NodeList.java:47)
Process finished with exit code 1
线程“main”java.util.InputMismatchException中的异常
位于java.base/java.util.Scanner.throwFor(Scanner.java:939)
位于java.base/java.util.Scanner.next(Scanner.java:1594)
位于java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
在……NodeList.getNodes(NodeList.java:40)
在……节点列表中。(NodeList.java:9)
位于……NodeList.main(NodeList.java:47)
进程已完成,退出代码为1
链接到包含节点的文件:可能是使用了错误的区域设置。 我认为“C”不是一个有效的语言环境,它应该是一个语言代码 你可以尝试使用
scanner.useLocale(Locale.ROOT);
这在我的机器上工作:
public static void main(String[] args) {
// TODO code application logic here
String s = "292961234 1376.42 618.056\n" +
"29535583 3525.73 530.522\n" +
"256351971 836.003 3563.33\n" +
"20992560 4179.74 3074.27";
Scanner scanner = new Scanner(s);
scanner.useLocale(Locale.ROOT);
for(int i = 0; i < 4; i++) {
int id = scanner.nextInt();
double x = scanner.nextDouble();
double y = scanner.nextDouble();
System.out.println(id+" "+x+" "+y);
}
}
publicstaticvoidmain(字符串[]args){
//此处的TODO代码应用程序逻辑
字符串s=“292961234 1376.42 618.056\n”+
“29535583 3525.73 530.522\n”+
“256351971 836.003 3563.33\n”+
"20992560 4179.74 3074.27";
扫描仪=新的扫描仪;
scanner.useLocale(Locale.ROOT);
对于(int i=0;i<4;i++){
int id=scanner.nextInt();
double x=scanner.nextDouble();
双y=scanner.nextDouble();
System.out.println(id+“”+x+“”+y);
}
}
可能是它使用了错误的区域设置。
我认为“C”不是一个有效的语言环境,它应该是一个语言代码
你可以尝试使用
scanner.useLocale(Locale.ROOT);
这在我的机器上工作:
public static void main(String[] args) {
// TODO code application logic here
String s = "292961234 1376.42 618.056\n" +
"29535583 3525.73 530.522\n" +
"256351971 836.003 3563.33\n" +
"20992560 4179.74 3074.27";
Scanner scanner = new Scanner(s);
scanner.useLocale(Locale.ROOT);
for(int i = 0; i < 4; i++) {
int id = scanner.nextInt();
double x = scanner.nextDouble();
double y = scanner.nextDouble();
System.out.println(id+" "+x+" "+y);
}
}
publicstaticvoidmain(字符串[]args){
//此处的TODO代码应用程序逻辑
字符串s=“292961234 1376.42 618.056\n”+
“29535583 3525.73 530.522\n”+
“256351971 836.003 3563.33\n”+
"20992560 4179.74 3074.27";
扫描仪=新的扫描仪;
scanner.useLocale(Locale.ROOT);
对于(int i=0;i<4;i++){
int id=scanner.nextInt();
double x=scanner.nextDouble();
双y=scanner.nextDouble();
System.out.println(id+“”+x+“”+y);
}
}
什么是扫描仪
?您正在尝试使用扫描仪对象读取文件吗?另外,尝试在双精度表达式上使用逗号而不是点。可能重复的可能重复的可能重复的欢迎使用StackOverflow。这里有一个相关的答案,就是只读取整数。您认为可以修改代码以读取整数和双精度吗?@GauravMall scanner是从我的文件读取的scanner对象。我们的老师给了我们一个文件,他们在文件中使用了点,所以我想我必须坚持这样做。什么是扫描仪
?您正在尝试使用扫描仪对象读取文件吗?另外,尝试在双精度表达式上使用逗号而不是点。可能重复的可能重复的可能重复的欢迎使用StackOverflow。这里有一个相关的答案,就是只读取整数。您认为可以修改代码以读取整数和双精度吗?@GauravMall scanner是从我的文件读取的scanner对象。我们的老师给了我们一个文件,其中他们使用了点,所以我想我必须坚持这一点。在这个练习中,我们已经给出了一些代码,其中包括这一行,以便将点作为双精度小数读取。它也适用于我的机器,我想问题在于他正在处理的文件。您的示例也适用于Locale(“C”)
在本练习中没有指定任何区域设置时
已经给出了一点代码,其中包含了这行代码,以便将点作为双精度小数读取。它也适用于我的机器,我认为问题在于他正在处理的文件您的示例也适用于区域设置(“C”)
和未指定任何语言环境时