首页 > 解决方案 > 将 Double.MAX_VALUE 分配给变量时有什么用?(这里是初学者)

问题描述

据我了解,当将 Double.MAX_VALUE 分配给变量 x 时,x = 2147483647。我的问题是,为什么要将这样的值分配给变量?如果我从下面的代码中删除它会发生什么?下面的代码取自https://java2blog.com/dijkstra-java/,在 java 中实现了 Dijkstra 算法。它代表 Vertex 类。

    import java.util.ArrayList;
import java.util.List;
 
public class Vertex implements Comparable<Vertex> {
 
 private String name;
 private List<Edge> adjacenciesList;
 private boolean visited;
 private Vertex predecessor;
 private double distance = Double.MAX_VALUE;
 
 public Vertex(String name) {
 this.name = name;
 this.adjacenciesList = new ArrayList<>();
 }
 
 public void addNeighbour(Edge edge) {
 this.adjacenciesList.add(edge);
 }
 
 public String getName() {
 return name;
 }
 
 public void setName(String name) {
 this.name = name;
 }
 
 public List<Edge> getAdjacenciesList() {
 return adjacenciesList;
 }
 
 public void setAdjacenciesList(List<Edge> adjacenciesList) {
 this.adjacenciesList = adjacenciesList;
 }
 
 public boolean isVisited() {
 return visited;
 }
 
 public void setVisited(boolean visited) {
 this.visited = visited;
 }
 
 public Vertex getPredecessor() {
 return predecessor;
 }
 
 public void setPredecessor(Vertex predecessor) {
 this.predecessor = predecessor;
 }
 
 public double getDistance() {
 return distance;
 }
 
 public void setDistance(double distance) {
 this.distance = distance;
 }
 
 @Override
 public String toString() {
 return this.name;
 }
 
 @Override
 public int compareTo(Vertex otherVertex) {
 return Double.compare(this.distance, otherVertex.getDistance());
 }
}

提前致谢!

标签: javaalgorithmintegerdouble

解决方案


因为对于 Dijsktra,您搜索最小值(距离),所以保存最小距离的变量设置为 MAXIMUM_VALUE,因为“其他所有值”都小于该值。这保证您将正确设置和比较您的第一个最小距离。


编辑

但是如果你不把它写成 MAX_VALUE 呢?您还不能比较和设置距离吗?

由于您搜索的是您不知道的距离,因此选择任何其他值作为起始值将为该案例引入错误来源:

starting_value < minimal_distance <= MAXIMUM_VALUE

或者换一种说法:如果你在 [0,∞) 中寻找一个最大值,为什么我们坚持从 开始0?因为这是正确的方法。


推荐阅读