Java 在浮点数组中查找最小值

Java 在浮点数组中查找最小值,java,arrays,Java,Arrays,在学校,我们被要求创建一个函数,在浮点数组中找到最小值。在前两个阵列中,它可以工作。但是因为第三个数组只包含负值,所以它们都低于初始化时给定的值。所以它仍然是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.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;
}
float[]number={3.3,4.5,7.2,5.3,9.0,2.3};//最小2.3,最大9.0
float[]numbers2={-8.0,4.5,1.2,-5.6,-9.1,4};//最小值-9.1,最大值4.5
float[]numbers3={-0.4,-0.7,-3.5,-1.9,-8.0};//最小值-8.0,最大值-0.4
无效设置(){
浮动最高=返回最高(数字);
浮动最高值2=返回最高值(数字2);
浮动最高值3=返回最高值(数字3);
println(“最高等级为:“+最高”);
println(“最高等级为:“+最高等级2”);
println(“最高等级为:“+最高等级3”);
}
浮点返回最高值(浮点[]数字){
最高浮点数=0;
for(int i=0;i最高){
最高=数字[i];
}
}
回报最高;
}
但是因为第三个数组只包含负值,所以它们都低于初始化时给定的值

答案是。。。有点简单。您可以使用数组中的一个数字(1)初始化变量
lower
,也可以使用(2)初始化变量

(1) 使用数组中的数字初始化变量:

float highest = numbers[0];
使用此解决方案,首先必须确保没有空数组。否则你会被解雇

(2) 使用尽可能低的浮点值初始化变量:

float highest = Float.NEGATIVE_INFINITY;
每个浮点值都大于浮点值。负无穷大(除了负无穷大值本身)。循环后,您可以检查
最高值
是否仍然等于
浮点值。负无穷大
。在这种情况下,数组为空或只包含负无穷大

我建议采用方法(2)。这是查找集合/数组的最低/最高值的常见模式,也可以很好地处理空集合/数组

但是因为第三个数组只包含负值,所以它们都低于初始化时给定的值

答案是。。。有点简单。您可以使用数组中的一个数字(1)初始化变量
lower
,也可以使用(2)初始化变量

(1) 使用数组中的数字初始化变量:

float highest = numbers[0];
使用此解决方案,首先必须确保没有空数组。否则你会被解雇

(2) 使用尽可能低的浮点值初始化变量:

float highest = Float.NEGATIVE_INFINITY;
每个浮点值都大于浮点值。负无穷大(除了负无穷大值本身)。循环后,您可以检查
最高值
是否仍然等于
浮点值。负无穷大
。在这种情况下,数组为空或只包含负无穷大


我建议采用方法(2)。这是查找集合/数组的最低/最高值的常见模式,也可以很好地处理空集合/数组。

问题是在循环之前将最高值设置为0。因为数组中的所有值都小于0,所以if语句的计算结果永远不会为true。添加如下布尔值:

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;
}
float返回最高值(float[]数字){
布尔值firstTime=true;
最高浮点数=0;
for(int i=0;i最高){
最高=数字[i];
第一次=错误;
}
}
回报最高;
}

问题是在循环之前将最高值设置为0。因为数组中的所有值都小于0,所以if语句的计算结果永远不会为true。添加如下布尔值:

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;
}
float返回最高值(float[]数字){
布尔值firstTime=true;
最高浮点数=0;
for(int i=0;i最高){
最高=数字[i];
第一次=错误;
}
}
回报最高;
}

我建议在初始化时将第一个元素设置为最高值 所以你的函数变成了

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;
}
float返回最高值(float[]数字){
浮动最高=数字[0];
for(int i=0;i最高){
最高=数字[i];
}
}
回报最高;
}

另外,我假设您在标题中犯了一个错误,并且希望找到最高值

我建议在初始化时将第一个元素设置为最高值 所以你的函数变成了

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;
}
float返回最高值(float[]数字){
浮动最高=数字[0];
for(int i=0;i最高){
最高=数字[i];
}
}
回报最高;
}

另外,我假设您在标题中犯了一个错误,并且希望找到最高值

您是否只尝试比较数组中的数字?尝试将
highest
的初始值设置为数组的初始值,而不是
0

是否仅尝试比较数组中的数字?尝试将
highest
的初始值设置为数组的初始值,而不是
0

您可以将
highest
的初始值设置为数组的第一个元素,而不是
0

highest = numbers[0];
但这样做的问题是,当您有空数组时,它将不起作用

此外,您还可以更有效地解决此问题:

最高值的初始值设置为java中浮点数的最低值

highest = -Float.MAX_VALUE;

这样,它可以很好地处理负浮点数的任何子集。

您可以将
最高值的初始值设置为数组的第一个元素,而不是
0

highest = numbers[0];
但这样做的问题是,当您有空数组时,它将不起作用

此外,您还可以更有效地解决此问题: