查找float数组中的最小值

时间:2017-10-04 07:18:43

标签: java arrays

在学校,我们被要求创建一个能够在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;
}

5 个答案:

答案 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;

通过这种方式,它可以与负浮点数的任何子集一起使用。