gpt4 book ai didi

java - 查找数组中的下一个 double 值

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:34 26 4
gpt4 key购买 nike

我正在编写一个 radio 调谐器的模拟程序。现在我想要一个可以以 0.05MHz 为步长循环遍历数组或数组列表的方法。目前,我有一个包含我最喜欢的 radio 频率的阵列,如果找到频率,则必须停止循环。

public static double favFrequencies [] = {89.8, 91.5, 93.7, 95.1, 97.7, 99.2, 100.7, 101.2, 101.7, 102.7, 103.0, 104.4};

目前我有以下代码:

public static void searchDown()
{
double startFrequency = Math.round(currentFreq * 100);
double maxFrequency = Math.round(87.80 * 100);
for (double f = startFrequency; f > maxFrequency; f -= 5) {
//boolean nextFavFound = false;
if (f < 8785)
{
f = 10800;
}
for (double f2 : favFrequencies) {
if (f / 100 == f2) {
nextFavFound = true;
//break;
}
}
if (nextFavFound) {
currentFreq = f /100;
RadioGUI.lblFreq.setText("FM " + Double.toString(currentFreq)+ "Mhz");
System.out.println("next favFrequency: " + f / 100);
nextFavFound = false;
break;
}
}
}

它确实工作得很好,但是当我再次运行该方法时,它将无法使用第一次的新输出值。

最佳答案

使用 for 循环和带小数位的 double 增量时,您会遇到精度问题。解决您的问题的一种实用方法是乘以 100。

public static void main(String[] args) {
double startFrequency = Math.round(88 * 100);
double maxFrequency = Math.round(108 * 100);
for (double f = startFrequency; f < maxFrequency; f += 5) {
boolean nextFavFound = false;
for (double f2 : favFrequencies) {
if (f / 100 == f2) {
nextFavFound = true;
break;
}
}
if (nextFavFound) {
System.out.println("next favFrequency: " + f / 100);
}
}
}

关于java - 查找数组中的下一个 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119562/

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