外部for循环变量无法正确更新

时间:2017-08-15 21:58:16

标签: java variables for-loop

我试图解决旅行推销员的问题。对于下面的例子,我有一个Tour t,它是一个城市的ArrayList,一个城市被定义为一个带有x和y坐标的类。我使用Collections.shuffle来随机化Tour t中的城市顺序,然后我想看看新的混洗游览是否具有totalDistance< finalTour的当前保存值。如果总距离较低,那么我想将其保存为最终游览。我现在只循环1次以解决我的代码问题。但是,在下面的示例中,即使距离已经低于Tour t totalDistance,finalTour也会始终更新为Tour t。不知道我做错了什么。似乎是一个问题,因为它被记住了#34;从上一次迭代而不是新副本?

 Tour finalTour = new Tour();

    for (int x = 0; x < 10; x++) {

        Tour t = new Tour(cityArray);

        t.shuffle();

        if (finalTour.getTourDistance() == 0.0 || (t.getTourDistance() < finalTour.getTourDistance())) {

            finalTour = t;

        }

        System.out.print("T" + x + ": " + t.getTourDistance());
        System.out.println(" finalTour: " + finalTour.getTourDistance());
    }

这里是示例输出:

T0: 5.23606797749979 finalTour: 5.23606797749979
T1: 4.0 finalTour: 4.0
T2: 5.446461113496085 finalTour: 5.446461113496085
T3: 6.06449510224598 finalTour: 6.06449510224598
T4: 4.0 finalTour: 4.0
T5: 4.0 finalTour: 4.0
T6: 4.618033988749895 finalTour: 4.618033988749895
T7: 4.82842712474619 finalTour: 4.82842712474619
T8: 4.618033988749895 finalTour: 4.618033988749895
T9: 5.03224755112299 finalTour: 5.03224755112299

我的getTourDistance方法返回总城市数组的欧几里德距离。请注意,我没有静态类或方法......

 public double getTourDistance() {

    double totalDistance = 0.0;

    if (this.tour.size() > 0) {

        for (int x = 0; x < this.tour.size() - 1; x++) {

            totalDistance += Math.sqrt(Math.pow((this.tour.get(x + 1).getY() - this.tour.get(x).getY()), 2) + Math.pow((this.tour.get(x + 1).getX() - this.tour.get(x).getX()),2));

        }

        totalDistance += Math.sqrt(Math.pow((this.tour.get(0).getY() - this.tour.get(this.tour.size() - 1).getY()), 2) + Math.pow((this.tour.get(0).getX() - this.tour.get(this.tour.size() - 1).getX()),2));
    }

    return totalDistance;

}

0 个答案:

没有答案