在学校,我们被要求创建一个能够在float数组中找到最低值的函数。在前2个阵列中它起作用。但是因为第3个数组只包含负值,所以它们都低于初始化时给出的值。所以它仍然是0.0。
有人可以帮忙吗?
float[] numbers = {3.3, 4.5, 7.2, 5.3, 9.0, 2.3}; // min 2.3, max 9.0
float[] numbers2 = {-8.0, 4.5, 1.2, -5.6, -9.1, 4}; // min -9.1, max 4.5
float[] numbers3 = {-0.4, -0.7, -3.5, -1.9, -8.0}; // min -8.0, max -0.4
void setup() {
float highest = returnHighest(numbers);
float highest2 = returnHighest(numbers2);
float highest3 = returnHighest(numbers3);
println("The highest grade is: " + highest);
println("The highest grade is: " + highest2);
println("The highest grade is: " + highest3);
}
float returnHighest(float[] numbers) {
float highest = 0;
for(int i = 0; i < numbers.length; i++) {
if(numbers[i] > highest) {
highest = numbers[i];
}
}
return highest;
}
答案 0 :(得分:4)
但是因为第3个数组只包含负值,所以它们都低于初始化时给出的值。
答案是......有点......简单。您可以使用数组中的一个数字(1)初始化变量lowest
,也可以使用lowest possible float value(2)初始化它。
(1)使用数组中的数字初始化变量:
float highest = numbers[0];
使用此解决方案,您首先必须确保没有空数组。否则你会得到ArrayIndexOutOfBoundsException
。
(2)用尽可能低的浮点值初始化变量:
float highest = Float.NEGATIVE_INFINITY;
每个浮点值都大于Float.NEGATIVE_INFINITY
(嗯......除了负无穷大值本身)。在循环之后,您可以检查highest
是否仍然等于Float.NEGATIVE_INFINITY
。在这种情况下,阵列是空的或只包含负无穷大。
我建议方法(2)。这是查找集合/数组的最低/最高值的常见模式,也可以很好地处理空集合/数组。
答案 1 :(得分:1)
问题是你在循环之前将最高值设置为0。然后你的if语句永远不会计算为true,因为数组中的所有值都小于0.添加一个像这样的布尔值:
float returnHighest(float[] numbers) {
boolean firstTime = true;
float highest = 0;
for(int i = 0; i < numbers.length; i++) {
if(firstTime || numbers[i] > highest) {
highest = numbers[i];
firstTime = false;
}
}
return highest;
}
答案 2 :(得分:0)
我建议在初始化时将第一个元素设置为最高值 所以你的功能就变成了。
float returnHighest(float[] numbers) {
float highest = numbers[0];
for(int i = 0; i < numbers.length; i++) {
if(numbers[i] > highest) {
highest = numbers[i];
}
}
return highest;
}
此外,我假设你在标题中犯了一个错误,并希望找到最高价值
答案 3 :(得分:0)
您是否尝试过只比较数组中的数字?尝试将highest
的初始值设置为数组的初始值,而不是0
。
答案 4 :(得分:0)
您可以将highest
的初始值设置为数组的第一个元素,而不是0
:
highest = numbers[0];
但是这样的问题是当你有空数组时它不会起作用。
此外,您可以更有效地解决此问题:
将highest
的初始值设置为java中浮点数的最小值
highest = -Float.MAX_VALUE;
通过这种方式,它可以与负浮点数的任何子集一起使用。