不兼容的类型;字符串无法转换为double:Java令牌



[edit]要澄清这是一个不同的问题:我的问题是关于解析字符串以使令牌接受它,并且没有任何答案格式化符合我的标准。

我有以下格式的文件:

A B 10
A C 12
A D 8
B D 5
B E 2
... 

以下是将上述数据存储在arraylist中的代码。但是,它只是存储启动节点,结束节点,而不是成本。

List<Node1> list = new ArrayList<Node1>();
while ((line = bufferReader.readLine()) != null) {
  String[] tokens = line.split(" ");
  list.add(new Node1(tokens[0], tokens[1], tokens[2])); // Error at tokens[2]              
}

以下是我的node1 class

class Node1 {
   String start, end;
   double cost;
    public Node1(String start, String end, double cost){
        this.start = start;
        this.end = end;
        this.cost = cost;
    }
    public String getStartNode() {
        return start;
    }
    public String getEndNode(){
        return end;
    }
    public double getCost(){
        return cost;
    }
}

它给我一个错误tokens[2]处,如下

 Incompatible types; String cannot be converted to double 

我理解错误,因为令牌期望字符串,但它发现了两倍(成本),但我不确定如何解决此问题。代币不会兼容阅读double还是什么?如果没有,我应该使用什么代替令牌[2]来存储我的双重价值?
我尝试过谷歌搜索,但似乎找不到任何解决方案。抱歉,我是这些东西的新手。请忍受我!

您需要将构造函数中的最后一个参数更改为double。

list.add(new Node1(tokens[0], tokens[1], Double.parseDouble(tokens[2])));

您也可以覆盖构造函数。

public Node1(String start, String end, String cost) {
  this(start, end, Double.parseDouble(cost));
}

使用double.parsedouble(...)

List<Node1> list = new ArrayList<Node1>();
while ((line = bufferReader.readLine()) != null) {
  String[] tokens = line.split(" ");
  list.add(new Node1(tokens[0], tokens[1], Double.parseDouble(tokens[2]))); // Error at tokens[2]              
}

String[] tokens = line.split(" ");创建一个字符串,但是您的节点类期望第三个值是双重的。尝试

list.add(new Node1(tokens[0], tokens[1], Double.parseDouble(tokens[2])));

更改:

List<Node1> list = new ArrayList<Node1>();
   while ((line = bufferReader.readLine()) != null) {
      String[] tokens = line.split(" ");
      list.add(new Node1(tokens[0], tokens[1], tokens[2]));             
   }

to:

List<Node1> list = new ArrayList<Node1>();
   while ((line = bufferReader.readLine()) != null) {
      String[] tokens = line.split(" ");
      list.add(new Node1(tokens[0], tokens[1], Double.parseDouble(tokens[2])));              
   }

最新更新