You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中用for循环实现城市间(排除自身)的距离计算?

城市间距离计算的遍历循环实现

需求

现有Java代码初始化了4个城市对象,每个城市包含坐标信息。需用for循环替代手动代码,实现每个城市调用Distance方法,计算与自身以外所有其他城市的距离,达到和手动调用完全一致的输出效果。

现有Lab2类代码

public class Lab2 {
    public static Cities [] PathSolution = new Cities[7];
    int PathIndex = 0;
    int StartCity;

    static Cities [] City = new Cities [4];
    public static void main(String[] args){
        for(int i = 0; i<City.length; i++)
            City[i] = new Cities();
        City[0].Initialization ( 0, 1, 1);
        City[1].Initialization ( 1, 5, 5);
        City[2].Initialization ( 2, 10, 3);
        City[3].Initialization ( 3, 2, 7);
        // 此处需添加循环代码
    }
}

手动调用的目标效果

以下是需要用循环替代的手动代码:

City[0].Distance(5, 5);
City[0].Distance(10, 3);
City[0].Distance(2, 7);
City[1].Distance(1, 1);
City[1].Distance(10, 3);
City[1].Distance(2, 7);
City[2].Distance(1, 1);
City[2].Distance(5, 5);
City[2].Distance(2, 7);
City[3].Distance(1, 1);
City[3].Distance(5, 5);
City[3].Distance(10, 3);

尝试的错误循环代码

以下是未成功的循环实现:

for (int i = 0; i < City.length; i++) {
    City[i].Distance(5, 5);
    i++;
    City[i].Distance(10,3);
    i++;
    City[i].Distance(2,7);
    i++;
}

Distance方法实现

public void Distance(float x, float y) {
    int dist = (int) Math.sqrt(Math.pow(City_X_Location - x , 2) + Math.pow(City_Y_Location - y , 2));
    System.out.println(dist);
}

注:原代码中sqrt需加上Math.前缀,否则会编译错误

预期输出

3
8
0
6
8
0
6
3
0
6
3
8

正确解决方案

错误原因分析

你写的循环存在两个核心问题:

  1. 手动自增i会导致索引越界,且无法遍历所有城市
  2. 硬编码目标坐标,无法灵活适配城市数量变化

正确实现代码

使用嵌套循环:外层遍历当前城市,内层遍历所有城市,排除自身后调用Distance方法,传入目标城市的坐标:

方案1:若Cities类的坐标字段为public

// 在main方法中添加这段代码
for (int i = 0; i < City.length; i++) {
    for (int j = 0; j < City.length; j++) {
        if (i != j) { // 跳过自身
            City[i].Distance(City[j].City_X_Location, City[j].City_Y_Location);
        }
    }
}

方案2:若Cities类的坐标字段为private(推荐封装)

先在Cities类中添加坐标的getter方法:

public class Cities {
    private float City_X_Location;
    private float City_Y_Location;
    // ...其他代码(Initialization方法等)

    public float getCityX() {
        return City_X_Location;
    }

    public float getCityY() {
        return City_Y_Location;
    }
}

再修改循环代码:

// 在main方法中添加这段代码
for (int i = 0; i < City.length; i++) {
    for (int j = 0; j < City.length; j++) {
        if (i != j) { // 跳过自身
            City[i].Distance(City[j].getCityX(), City[j].getCityY());
        }
    }
}

效果说明

这段嵌套循环会遍历所有城市对(i,j),其中i≠j,完全复现手动调用的逻辑,输出结果与预期一致。

内容的提问来源于stack exchange,提问作者NewCoder2001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:06:01