gpt4 book ai didi

java - 绝对值计算不起作用...?

转载 作者:行者123 更新时间:2023-11-30 06:42:20 26 4
gpt4 key购买 nike

我已经调试这个问题一个多小时了,我不知道哪里出了问题。我试图简单地比较两个整数并将较小的整数存储到 tempDistance 变量。

然而,这每次都会失败。我不知道为什么。

观察:

public void park() {

StreetName temp = null;

int tempDistance = 10000;

for(StreetName street : streets) {

int yLocale = this.y - street.getY();
int xLocale = this.x - street.getX();
int num = yLocale + xLocale;

System.out.println(Math.abs(num) + " absolute value");

if(Math.abs(num) < tempDistance) {

tempDistance = num;
temp = street;
}


}
System.out.println("Parked at " + temp.getName());

街道值如下:

streets.add(new StreetName("Ames Street", 0, 0));
streets.add(new StreetName("Nevada Street", 40, 0));
streets.add(new StreetName("Roland Street", 15, -30));
streets.add(new StreetName("Jordan Street", -15, -5));
streets.add(new StreetName("Granger Steet", -22, 20));
streets.add(new StreetName("Baxter Street", 75, 19));
streets.add(new StreetName("MinBurn Street", -35, 55));

当我输入“15 west, 5 south”时,应选择佐敦街。相反,艾姆斯街不断被选中。

这是控制台输出:

enter image description here

有人知道这里发生了什么吗?

最佳答案

问题似乎是,对于 Ames Street,num 是负数,因此 tempDistance 变为负数,因此后面的检查都不适用,因为没有 abs 数字可以小于负数。

你可能应该做 tempDistance = Math.abs(num);

然而,这可能仍然是错误的,因为 xLocaleyLocale 可能会相互“抵消”,如果两者都很大并且一个为正,一个为负。因此,此时您应该已经掌握了 abs:

int num = Math.abs(yLocale) + Math.abs(xLocale);

最后,您可以使用 Java 的 Stream API 的 min方法与一个特殊的比较器得到与当前位置的最小距离的街道。

StreetName temp = streets.stream().min(Comparator.comparing(street -> {
int yLocale = this.y - street.getY();
int xLocale = this.x - street.getX();
return Math.abs(yLocale) + Math.abs(xLocale);
})).get();

关于java - 绝对值计算不起作用...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53598870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com