【问题标题】:How to get maximum value from double data type value set?如何从双数据类型值集中获取最大值?
【发布时间】:2014-08-01 11:40:07
【问题描述】:

我从五个不同的函数中获取五个双精度数据类型值。如果不将这些值添加到数组中,是否有任何有效的 java 代码可以从这五个值集中获取最大值。

double d1=r1.function1();
double d2=r1.function2();
double d3=r1.function3();
double d4=r1.function4();
double d5=r1.function5();

double[] d=new  double[5];
for(int i=0:i<5;i++){
    d[i]="d"+i;
}
double x=max(d);

public static double max(double[] t) {
    double maximum = t[0];   // start with the first value
    for (int i=1; i<t.length; i++) {
        if (t[i] > maximum) {
            maximum = t[i];   // new maximum
        }
    }
    return maximum;
}

如果不付出这么多努力,有没有什么有效的方法可以从上面的双精度类型数据集中获得最大值?而且,在向循环添加值时,d[i]="d"+i; 部分中也会出现一些错误。请给我更好的解决方案。

【问题讨论】:

  • 您必须将这些值添加到 some 容器中,无论是 Array / List / Set 等。这将是最简单的方法..
  • 用数组做是最简单的,“d”在这里做什么

标签: java arrays loops double max


【解决方案1】:

您可以使用ArrayList&lt;Double&gt; 和比

    ArrayList<Double> alist=new ArrayList<Double>();
    //Add double values to this list

您可以使用Collections.max(alist) 获取最大值,使用Collections.min(alist) 获取最小值。

【讨论】:

    【解决方案2】:
    Collections.max(Arrays.asList(d));
    

    if 会更有效,而不是将 d 作为数组。将其作为列表开始。

    【讨论】:

    • 如果不将这些值添加到数组中,是否有任何有效的 java 代码可以从这五个值集中获取最大值。
    • @TheLostMind 如果您有 5 个值(不在列表或数组中),唯一的方法是将所有值相互比较。该解决方案也只适用于 5 个值,不多也不少。
    • 我的观点完全正确。这就是我投票关闭它的原因。没有没有有效的解决方案。 :)
    • @TheLostMind 有效的解决方案是将值存储在列表中。然后使用 Collections 类。
    • @TheLostMind 那是真的......我也认为将值添加到 arraylist 然后 max 方法的最佳方法。谢谢大家。 :)(和@nafas)
    【解决方案3】:

    您可以使用可变参数而不是数组。

    public double max(double... values) {
        int max = -Double.MAX_VALUE;
        for(double value : values) {
            if(value > max) {
                max = value;
            }
        }
        return max;
    }
    

    然后你调用你的方法像double max = max(d1, d2, d3, d4, d5);

    编辑:

    你的台词

    for(int i=0:i<5;i++){
        d[i]="d"+i;
    }
    

    不工作,因为"d"+i 将创建一个String,由于字符串连接,不会是具有该名称的double 变量。 你不能像这样填充你的数组。 你必须这样做:

    d[0] = d1;
    d[1] = d2;
    d[2] = d3;
    d[3] = d4;
    d[4] = d5;
    

    【讨论】:

    • 变量“max”应该是double而不是int。
    【解决方案4】:

    在 Java 8 中:

    Arrays.stream(darray).max().getAsDouble()
    

    完整方法(在我们的例子中,如果数组为空,则返回零;根据需要更改您的默认值)。

    public static double max(final @Nullable double... values)
    {
        return ((values != null) && (values.length > 0)) ? Arrays.stream(values).max().getAsDouble() : 0;
    }
    

    可以使用数组或可变参数调用此方法:

    double[] darray = new double[]{43.7, 65.2, 99.1, 87.6};
    double max1 = max(darray);
    double max2 = max(1.2, 3.4, 5.6);
    

    【讨论】:

      【解决方案5】:

      您不必自己将它们放入数组中,让 Java 使用 varargs 完成这部分工作:

      public static double max(Double... numbers){
          double max = numbers[0];
      
          for(int i = 0; i < numbers.length; i++){
              if(numbers[i] > max){
                  max = numbers[i];
              }
          }
      
          return max;
      }
      

      【讨论】:

        【解决方案6】:

        您可以将d1,d2,d3,d4,d5添加到TreeSet

        Set<Double> set=new TreeSet<>(); // while you adding set will be sorted
        // add values to set
        List<Double> setAsList=new ArrayList(set); // convert set to list
        System.out.println(setAsList.get(setAsList.size()-1)); // last value is the max
        

        【讨论】:

          【解决方案7】:
          List <Double> d = new ArrayList<>();
           d. add (d1);
          d. add (d2);
          d. add (d3);
          d. add (d4);
          d. add (d5);
          Double max=Collections. max (d);
          

          【讨论】:

          • 为了改进您的答案,您可以简要解释一下.Max 函数是如何成为 Enumerable 对象的通用函数,以使用法更清晰。
          • 我认为它本身不合格且不言自明,根据我的代码是不言自明的。 .尽管我可以按照您的判断对代码进行脚注。 .到目前为止,我将确保我为我的作品添加注释
          【解决方案8】:

          在 Java 8 中,

          java.util.Arrays.parallelSort(d).get(d.size-1)
          

          在(合并排序的)数组中获取最大值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-11-11
            • 1970-01-01
            • 2019-05-04
            • 2011-12-13
            • 2020-03-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多