【问题标题】:How to find maximum value of set of variables如何找到一组变量的最大值
【发布时间】:2016-03-24 03:17:21
【问题描述】:

我想知道是否有人可以帮助我找到一组变量的最大值并将它们分配给另一个变量。这是我的代码的 sn-p 可能有助于理解我在说什么。

// Ask for quarter values.
    System.out.println("What is the value of the first quarter?");
    firstQuarter = input.nextDouble();

    System.out.println("What is the value of the second quarter?");
    secondQuarter = input.nextDouble();

    System.out.println("What is the value of the third quarter?");
    thirdQuarter = input.nextDouble();

    System.out.println("What is the value of the fourth quarter?");
    fourthQuarter = input.nextDouble();

    //Tell client the maximum value/price of the stock during the year.     
    //maxStock = This is where I need help 
    System.out.println("The maximum price of a stock share in the year is: $" + maxStock + ".");

【问题讨论】:

    标签: java variables max


    【解决方案1】:

    在 Java 中,您可以像这样使用Math.max

    double maxStock = Math.max( firstQuarter, Math.max( secondQuarter, Math.max( thirdQuarter, fourthQuarter ) ) );
    

    不是最优雅的,但它会起作用。

    或者,对于更健壮的解决方案,定义以下函数:

    private double findMax(double... vals) {
       double max = Double.NEGATIVE_INFINITY;
    
       for (double d : vals) {
          if (d > max) max = d;
       }
    
       return max;
    }
    

    然后您可以通过以下方式调用:

    double maxStock = findMax(firstQuarter, secondQuarter, thirdQuarter, fourthQuarter);
    

    【讨论】:

    • 抱歉,我以为这是在 Java 论坛或类似的地方。
    • @CodyBennett 不用担心。我已经为您添加了 Java 标记。如果您正在寻找不同的答案,这可能有助于获得更多回复。
    • 此解决方案已被破坏。 Double.MIN_VALUE 返回“double 类型的最小正非零值”,这是一个非常接近 0 的数字,而不是最大可能的负 double。相反,可以使用 Double.NEGATIVE_INFINITY 或 -Double.MAX_VALUE 之类的东西。
    • 这是 java8 之前的一个好方法。对于现代方法,请参阅@arjabbar 的(下一个)答案
    【解决方案2】:

    一种统统统统的方法

    public static <T extends Comparable<T>> T max(T...values) {
        if (values.length <= 0)
            throw new IllegalArgumentException();
    
        T m = values[0];
        for (int i = 1; i < values.length; ++i) {
            if (values[i].compareTo(m) > 0)
                m = values[i];
        }
    
        return m;
    }
    

    【讨论】:

      【解决方案3】:

      对于原始变量,最好的选择可能是数组或集合:

      数组:

      double [ ] data = { firstQuarter , secondQuarter , thirdQuarter , fourtQuarter ) ;
      Arrays . sort ( data ) [ 3 ] ;
      

      收藏:

      List<Double> data = new Arraylist<Double>();
      data.add(firstQuarter);
      data.add(secondQuarter);
      data.add(thirdQuarter);
      data.add(foutQuarter);
      Collections.sort(data);
      data.get(3);
      

      如果您使用对象,则可以将集合与比较器一起使用:

      class Quarter {
          private double value;
          private int order;
      
          // gets and sets
      }
      

      并获得最大值:

      List<Quarter> list = new ArrayList<Quarter>();
      Quarter fisrt = new Quarter();
      first.setValue(firstQuarter);
      first.setOrder(1);
      list.add(first);
      // Do the same with the other values
      Collections.sort(list, new Comparator<Quarter>(){
          compare(Object o1, Object o2){
              return Double.valueOf(o1.getValue()).compareTo(o2.getValue());
          }
      }
      

      这可能更复杂,但如果您使用对象,我认为效果会更好。

      【讨论】:

        【解决方案4】:

        我相信现在 Java 8 中最简洁的版本应该是这样的:

        DoubleStream.of(firstQuarter , secondQuarter , thirdQuarter , fourtQuarter).max();
        

        【讨论】:

          【解决方案5】:
          double [ ] data = { firstQuarter , secondQuarter , thirdQuarter , fourtQuarter ) ;
          Arrays . sort ( data ) [ 3 ] ;
          

          【讨论】:

            【解决方案6】:

            聚会有点晚了,但对于其他查看此问题的人来说,java 8 具有完全实现此功能的原始流类型

            Collection<Integer> values = new ArrayList<>();
            OptionalInt max = values.stream().mapToInt((x) -> x).max();
            

            mapToInt 是描述如何将输入转换为整数类型的关键函数。然后,生成的流具有特定于整数类型的附加聚合器和收集器,其中之一是 max()

            如果操作成功,则可以从OptionalInt 中提取结果值

            【讨论】:

              【解决方案7】:
              Max = firstQuarter;
              If(secondQuarter > max)
                 Max = secondQuarter;
              

              ...等等

              【讨论】:

                【解决方案8】:
                import java.util.Scanner;
                
                
                public class dmar {
                
                public static void main ( String  []  srgs){
                
                    Scanner dmar=new Scanner(System.in);{
                
                        {
                
                System.out.println ( "inter number of x  plz") ;
                
                double x=dmar.nextDouble();
                
                System.out.println ( "inter number of y plz") ;{
                
                
                double y=dmar.nextDouble();
                
                System.out.println ( "inter number of t  plz") ;
                double t=dmar.nextDouble();
                
                System.out.println ( "inter number of f  plz") ;
                double f=dmar.nextDouble();
                
                {
                
                {
                if (x>y);
                
                System.out.println("x biger than y");
                
                
                if (x>t);
                System.out.println("x biger than t");
                
                 if (x>f);
                
                System.out.println("x biger than f");
                
                
                 if (y>x);
                System.out.println("y biger than x");
                
                
                
                if (y>t);
                System.out.println("y biger than t");
                
                 if (y>f);
                System.out.println("y biger than f");
                
                if (t>x&t>f&t>y);
                System.out.println("t biger than x");
                
                if (t>y);
                System.out.println("t biger than y");
                
                if (t>f);
                System.out.println("t biger than f");
                
                 if (f>x);
                System.out.println("f biger than x");
                
                
                if (f>y);
                System.out.println("f biger than y");
                
                
                         if (f>t);
                System.out.println("f biger than t");
                
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-06-24
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-02-10
                  相关资源
                  最近更新 更多