【问题标题】:Incompatible types; String cannot be converted to double : JAVA TOKEN不兼容的类型;字符串无法转换为双精度:JAVA TOKEN
【发布时间】:2015-05-13 15:27:36
【问题描述】:

[编辑] 澄清这是一个不同的问题:我的问题是关于解析 String 以使令牌加倍以接受它,并且此问题 Java Double to String conversion without formatting 的答案均不符合我的标准。

我有一个格式如下的文件:

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 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 

我将错误理解为,token 需要字符串,但它发现双倍(成本),但我不知道如何解决这个问题。令牌不兼容读取双精度或什么?如果不是,我应该使用什么来代替令牌[2] 来存储我的双精度值?
我试过谷歌搜索,但似乎找不到任何解决方案。 对不起,我对这些东西不熟悉。请多多包涵!

【问题讨论】:

  • 试试Double.parseDouble(tokens[2])
  • tokens 是一个字符串数组。它不存储 any 双打。因此,您需要将令牌解析为双精度。最简单的方法:Double.parseDouble(tokens[2]);
  • @arhimed 是的,我现在试过了,这没有给我任何错误,但它仍然没有将数值存储在数组列表中

标签: java file-io token


【解决方案1】:

您需要将构造函数中的最后一个参数更改为双精度值。

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));
}

【讨论】:

    【解决方案2】:

    使用 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]              
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 感谢您的简短解释!
      【解决方案4】:

      变化:

      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]));             
         }
      

      收件人:

      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])));              
         }
      

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 1970-01-01
        • 1970-01-01
        • 2014-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-24
        • 1970-01-01
        相关资源
        最近更新 更多