Java计算相邻城市最短距离报City.getX()空指针错误如何解决
Java相邻城市查找代码问题修复
错误根因
- 初始化城市数组时仅创建了
City实例,未将实例赋值到数组对应位置,导致cityArr所有元素为null,触发空指针异常 - 遍历相邻城市对时的循环边界错误,当
i取到数组最后一个下标时,i+1会超出数组范围,触发数组越界异常 - 欧几里得距离计算逻辑错误,你当前写的
Math.sqrt(newX) + Math.sqrt(newY)不符合公式要求,正确公式为√(x差² + y差²) - 方法返回值不符合需求,需求要求返回最近相邻城市的名称,当前方法仅返回最小距离整数值,且未记录最小距离对应的城市下标
修复后代码
首先补充City类的标准实现(如果你的City类已有对应逻辑可跳过):
public class City { private String name; private int r; private int x; private int y; public City(String name, int r, int x, int y) { this.name = name; this.r = r; this.x = x; this.y = y; } public String getName() { return name; } public int getX() { return x; } public int getY() { return y; } @Override public String toString() { return "City{" + "name='" + name + '\'' + ", x=" + x + ", y=" + y + '}'; } }
修复后的Maincity类代码:
public class Maincity { public static void main(String[] args) { City [] cityArr = new City[10]; String[] nameArr = new String[] {"Hadera","Beer Sheva","Haifa", "Ashdod", "Eilat", "Jerusalem", "Ashkelon", "Tel Aviv", "Hertzila", "Netanya"}; for (int i=0;i<cityArr.length;i++) { int rRandom = (int)(Math.random() * 100000) + 10000; int xRandom = (int)(Math.random() * 10000) + 1000; int yRandom = (int)(Math.random() * 10000) + 1000; // 修复点1:将创建的City实例存入数组 cityArr[i] = new City(nameArr[i], rRandom, xRandom, yRandom); System.out.println(cityArr[i]); } // 直接输出最近的相邻城市对 System.out.println("最近的相邻城市对为:" + getNearestAdjacentCities(cityArr)); } // 修复点2:修改方法返回值为字符串,返回城市名称 public static String getNearestAdjacentCities(City[] city) { int minDistance = Integer.MAX_VALUE; // 记录最小距离对应的第一个城市下标 int minIndex = 0; // 修复点3:修改循环边界,i最大取到倒数第二个下标 for (int i = 0; i < city.length - 1; i++) { int xDiff = city[i].getX() - city[i + 1].getX(); int yDiff = city[i].getY() - city[i + 1].getY(); // 修复点4:修正距离计算逻辑 int distance = (int) Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2)); if (distance < minDistance) { minDistance = distance; minIndex = i; } } // 返回两个城市的名称 return city[minIndex].getName() + " 和 " + city[minIndex + 1].getName(); } }
内容的提问来源于stack exchange,提问作者Yonatan
相关产品推荐
相关产品推荐

