我遇到了投射问题。我似乎无法弄清楚问题,因为一切似乎都是有序的。我理解,要从Double包装类显式转换为Integer包装类,它可以完成,但我的编译器无法识别它。我错过了一些明显的东西吗?
我得到的确切错误是:“不可转换的类型;无法将'double'强制转换为'java.lang.Integer'。
感谢您的帮助!
private HashMap<String, Integer> shortestPath(String currentVertex, Set<String> visited) {
double tempVal = Double.POSITIVE_INFINITY;
String lowestVertex = "";
Map<String, Integer> adjacentVertex = this.getAdjacentVertices(currentVertex);
HashMap<String, Integer> lowestCost = new HashMap<String, Integer>();
for(String adjacentNames : adjacentVertex.keySet()) {
Integer vertexCost = adjacencyMap.get(currentVertex).get(adjacentNames);
if(!visited.contains(adjacentNames) && (vertexCost < tempVal)) {
lowestVertex = adjacentNames;
tempVal = vertexCost;
}
}
lowestCost.put(lowestVertex, (Integer)tempVal);
return lowestCost;
}
答案 0 :(得分:3)
您无法直接从Double转换为Integer。您需要执行以下操作:
Double d = new Double(1.23);
int i = d.intValue();
中所述
答案 1 :(得分:0)
试试这个
lowestCost.put(lowestVertex, (Integer) new Double(tempVal).intValue());
希望它能解决您的问题
答案 2 :(得分:0)
这似乎是最简单的:
lowestCost.put(lowestVertex, (int) tempVal);
首先,明确地转换为int
,然后让编译器将int
值自动装箱到Integer
。
请注意,这也消除了创建其他答案所暗示的各种助手一次性对象的需要(额外Double
甚至String
)。这是我能想到的最有效的方式(此时此刻)。