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

时间:2019-08-15 11:50:14

标签: java java.util.scanner

我正在尝试将文件中的坐标读取到数组中。

每个坐标都有一个id,一个Reload configuration from disk和一个x-value

文件采用以下格式:y-value

示例:

id position.x position.y

注意:有4行包含总共4个坐标。

我创建了类292961234 1376.42 618.056 29535583 3525.73 530.522 256351971 836.003 3563.33 20992560 4179.74 3074.27 ,其构造函数期望Node

这是NodeList类,应该具有保存节点的数组属性:

(int id, double x, double y)

package .....; import java.io.File; import java.util.Iterator; import java.util.Locale; import java.util.Scanner; public class NodeList implements Iterable<Node> { private Node[] nodes = getNodes(); @Override public Iterator<Node> iterator() { return null; } public Node[] getNodes() { Node[] result; File f; Scanner scanner; try { f = new File("nodes.txt"); Scanner s = new Scanner(f); int ctr = 0; while (s.hasNextLine()) { ctr++; s.nextLine(); } result = new Node[ctr]; } catch (Exception e) { return null; } try { scanner = new Scanner(f); } catch (Exception e) { return null; } Locale.setDefault(new Locale("C")); for(int i = 0; i < result.length; i++) { int id = scanner.nextInt(); double x = scanner.nextDouble(); double y = scanner.nextDouble(); result[i] = new Node(id,x,y); } return result; } public static void main(String[] args) { NodeList nl = new NodeList(); } } 类:

Node

当调用包含所示代码的方法时,我得到以下信息 例外:

package ...;

public class Node {
    private int id;
    private double x;
    private double y;
    public Node(int id, double x, double y){
        this.id = id;
        this.x = x;
        this.y = y;
    }
    public int getId(){
        return id;
    }
    public double getX(){
        return x;
    }
    public double getY(){
        return y;
    }
}

链接到包含以下节点的文件:https://pastebin.com/zhzp3DTi

1 个答案:

答案 0 :(得分:0)

可能是因为使用了错误的语言环境。 我认为“ 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);
    }
}