【问题标题】:Simple task for beginner (array with return) [closed]初学者的简单任务(带返回的数组)[关闭]
【发布时间】:2020-02-02 13:26:55
【问题描述】:

对不起,我的英语还不是最好的。 我做了一个简单的任务,我只是在学习 java,我的问题是我怎样才能更好地完成这个任务?
任务是,创建一个非整数数组,将这些数字放入数组中,然后将其写入最小值、最大值和平均值,并带有返回方法。我做到了,但我不喜欢 a 所做的。

我怎样才能更好地完成这项任务?或者返回方法在哪里有for循环?还是不可能?

我的代码是:

public class program {

    public static  class Main {

        public static void main(String[] args) {
            // write your code here
            double[] tömb;
            int max = 10;
            tömb = new double[max];
            for (int i = 0; i < max; i++) {
                tömb[i] = i * 1.65223;
            }
    //-------------------------------------------------------------------------------------------------------------------
            for (int i = 0; i < max; i++) {
                konvertáló(i);
                System.out.println("to whole number "+konvertáló(i));
            }
    //--------------------------------------------------------------------------------------------------------------------
            double minimum=tömb[0];
            for (int i = 1; i < max; i++) {
                if(minimum(i)<  minimum){
                    minimum=minimum(i);
                }

            }
            System.out.println("minimum value "+minimum);
    //-------------------------------------------------------------------------------------------------------------------
            double avg=0;
            for (int i = 0; i <max ; i++) {
                avg+=avg(i);
            }
            System.out.println("az average value "+avg/max);

            double maximum=tömb[0];
            for (int i = 0; i <max ; i++) {
                if(maximum <maximum(i)){
                    maximum=maximum(i);
                }
            }
            System.out.println("maximum value "+maximum);
        }

        public static double konvertáló(double x) {

            return Math.round(x);
        }
        public static double minimum(double y) {


            return Math.round(y);
        }
        public static double avg(double y) {


            return Math.round(y);
        }

        public static double maximum(double y) {


            return Math.round(y);
        }

    }
}

【问题讨论】:

  • 返回方法?你打算从哪里返回或返回到哪里?您正在使用局部变量。
  • 我不想写这么多,我的计划是使用返回方法进行小计数,如 avg,max,min (for,if, foreach, while, do, while.. ) 有可能吗?
  • 你想不想写这么多主线没有区别。一切都在一个类中,你没有实例成员......你为什么认为你需要 getter?
  • 提示:您也可以使用java.util.DoubleSummaryStatistics 类为您完成所有计算(尽管您不会自己学习如何使用方法)

标签: java arrays methods return average


【解决方案1】:

用一种方法来做。并且有很多关于堆栈溢出的类似问题,有人会将您的问题标记为重复。反正。检查下一个代码,它将打印 min、max 和 avr

public static void max_min_avr(int[] numbers) {
    int maxValue = numbers[0];
    int minValue = numbers[0];
    int sum = 0;
    for (int i = 1; i < numbers.length; i++) {
        if (numbers[i] > maxValue)
            maxValue = numbers[i];
        if (numbers[i] < minValue)
            minValue = numbers[i];
        sum += numbers[i];
    }
    System.out.println("Max: " + maxValue);
    System.out.println("Min: " + minValue);
    System.out.println("AVR: " + sum + numbers[0] / numbers.length);
}

如果您需要返回值。并且不想在 main 中写很多东西。打破方法中的代码。

public static void main(String[] args) {
    System.out.println(min(new double[]{3.0,4.0,5.0,7.0,9.0}));
    System.out.println(max(new double[]{3.0,4.0,5.0,7.0,9.0}));
    System.out.println(avr(new double[]{3.0,4.0,5.0,7.0,9.0}));
}


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

    return maxValue;
}

public static double min(double[] numbers){
    double minValue = numbers[0];
    for (int i = 1; i < numbers.length; i++) {
        if (numbers[i] < minValue)
            minValue = numbers[i];
    }
    return minValue;
}

public static double avr(double[] numbers){
    double sum = 0;
    for (int i = 0; i < numbers.length; i++) {
        sum += numbers[i];
    }

    return sum / (double) numbers.length;
}

如果您熟悉流。接下来是最短的代码。

    List<Double> d = Arrays.asList(3.0,4.0,5.0,7.0,9.0);
    d.stream().max(Double::compare).ifPresent(System.out::println);
    d.stream().min(Double::compare).ifPresent(System.out::println);
    d.stream().mapToDouble(x -> x).average().ifPresent(System.out::println);

把它放在 main 方法中,你将在 4 行代码中得到 min、max 和 avr。

【讨论】:

  • 谁对我投了反对票?
  • 这很简单,我的问题是另一个我不想主要写这么多的问题,我的计划是使用返回方法进行小计数,如 avg、max、min(与 like for、 if, foreach, while, do, while..) 它可能吗?如果是的话怎么做?
  • 我已经更新了我的答案,检查一下
【解决方案2】:

检查此代码

   public static void main(String[] args) {
                // write your code here
                double[] tomb;
                int max = 10;
                tomb = new double[max];
                for (int i = 0; i < max; i++) {
                        tomb[i] = i * 1.65223;
                }
                System.out.println("Minimum: " + getMin(tomb));
                System.out.println("Maximum: " + getMax(tomb));
                System.out.println("Average: " + getAverage(tomb));
        }

        private static double getMin(double[] tomb) {
                double min = tomb[0];
                for (double d:tomb) {
                        if (d < min) {
                                min = d;
                        }
                }
                return min;
        }

        private static double getMax(double[] tomb) {
                double max = tomb[0];
                for (double d:tomb) {
                        if (d > max) {
                                max = d;
                        }
                }
                return max;
        }
        private static double getAverage(double[] tomb) {
                double avg = 0;
                for (double d:tomb) {
                        avg+=d;
                }
                return avg/tomb.length;
        }

【讨论】:

  • 谢谢,这正是我要找的。非常感谢!
猜你喜欢
  • 2021-09-02
  • 2022-01-25
  • 1970-01-01
  • 2020-10-24
  • 2010-09-13
  • 2013-04-27
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多