不兼容的类型;字符串无法转换为双精度:JAVA TOKEN
Incompatible types; String cannot be converted to double : JAVA TOKEN
[EDIT] 澄清这是一个不同的问题:我的问题是关于将字符串解析为双倍的令牌以接受它并且 none 这个问题的答案 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
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]
处给我一个 ERROR,如下所示
Incompatible types; String cannot be converted to double
我理解这个错误是因为,token 需要 String 但它发现了 double (cost) 但我不确定如何解决这个问题。令牌不兼容阅读双倍还是什么?如果不是,我应该使用什么代替 tokens[2] 来存储我的双精度值?
我试过谷歌搜索,但似乎找不到任何解决方案。
对不起,我是这个东西的新手。请多多包涵!
您需要将构造函数中的最后一个参数更改为双精度。
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]
}
变化:
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])));
}
String[] tokens = line.split(" ");
创建一个字符串数组,但您的节点 class 期望第三个值是双精度值。
尝试
list.add(new Node1(tokens[0], tokens[1], Double.parseDouble(tokens[2])));
[EDIT] 澄清这是一个不同的问题:我的问题是关于将字符串解析为双倍的令牌以接受它并且 none 这个问题的答案 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
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]
处给我一个 ERROR,如下所示
Incompatible types; String cannot be converted to double
我理解这个错误是因为,token 需要 String 但它发现了 double (cost) 但我不确定如何解决这个问题。令牌不兼容阅读双倍还是什么?如果不是,我应该使用什么代替 tokens[2] 来存储我的双精度值?
我试过谷歌搜索,但似乎找不到任何解决方案。
对不起,我是这个东西的新手。请多多包涵!
您需要将构造函数中的最后一个参数更改为双精度。
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]
}
变化:
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])));
}
String[] tokens = line.split(" ");
创建一个字符串数组,但您的节点 class 期望第三个值是双精度值。
尝试
list.add(new Node1(tokens[0], tokens[1], Double.parseDouble(tokens[2])));