Java 从文件中读取交替数据类型

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.

我正在尝试将坐标从文件读入数组

每个坐标都有一个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.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”)
和未指定任何
语言环境时