【问题标题】:Rainfall class, finding the max and minimum from an array降雨类,从数组中找到最大值和最小值
【发布时间】:2014-12-12 13:27:58
【问题描述】:

我正在为我的一个 java 类编写一个程序,它会问这个问题:

编写一个 Rainfall 类,将 12 个月中每个月的总降雨量存储到一个双精度数组中。该程序应具有返回以下内容的方法:

  • 全年总降雨量
  • 月平均降雨量
  • 降雨最多的月份
  • 降雨最少的月份

以完整的程序演示课程。 (月降雨量数据不接受负数)

import java.util.Scanner;
import java.io.*;
public class apples{
       public static void main (String[] args){
    Scanner kenny = new Scanner(System.in);
    double rain[]=new double[13];
    double sum = 0;
    double avg =0;
    double most =0;
    double least =0;

    System.out.println("Your local weather man here getting paid to tell you the wrong weather!!");
    System.out.println("");
    System.out.println("Please enter in the following rainfall for the months ahead: ");
    System.out.println("Month\tRainfall (In inches)");
    System.out.print("January: ");
    rain [0] = kenny.nextDouble();
    System.out.print("February: ");
    rain [1] = kenny.nextDouble();
    System.out.print("March: ");
    rain [2] = kenny.nextDouble();
    System.out.print("April: ");
    rain [4] = kenny.nextDouble();  
    System.out.print("May: ");
    rain [5] = kenny.nextDouble();  
    System.out.print("June: ");
    rain [6] = kenny.nextDouble();  
    System.out.print("July: ");
    rain [7] = kenny.nextDouble();  
    System.out.print("August: ");
    rain [8] = kenny.nextDouble();  
    System.out.print("September: ");
    rain [9] = kenny.nextDouble();  
    System.out.print("October: ");
    rain [10] = kenny.nextDouble(); 
    System.out.print("November: ");
    rain [11] = kenny.nextDouble();
    System.out.print("December: ");
    rain [12] = kenny.nextDouble();

    //(Or rain[] = 1,2,3,4,5,6,7,8,9,10,11,12);

    sum = rain[0] + rain[1] + rain[2] + rain[3] + rain[4] + rain[5] + rain[6] + rain[6] + rain[7] + rain[8] + rain[9] + rain[10] + rain[11] + rain[12] ;
    avg = (rain[0] + rain[1] + rain[2] + rain[3] + rain[4] + rain[5] + rain[6] + rain[6] + rain[7] + rain[8] + rain[9] + rain[10] + rain[11] + rain[12]) / 12;

    System.out.println("The sum of all the rain is: " + sum);
    System.out.println("The average rainfall was:" + avg + " inches");
    System.out.print("The month with the most rain was: ");


       }
    private static void getMaxValue(double[] rain) {


    getMaxValue(rain);
    System.out.println(getMaxValue(rain));


    System.out.println("The month with the least rain was: ");
    }
    private static void getMinValue(double[] rain) {

    getMinValue(rain);
    System.out.println(getMaxValue(rain));     



       }}

我已经准备好了大部分内容。我只是想知道如何从输入的数字中获取“Max”和“Min”。

任何帮助都会很棒!

【问题讨论】:

  • 我认为这是一项旨在练习/学习循环的任务。否则,您可以简单地使用 docs.oracle.com/javase/8/docs/api/java/util/… 。但是,一般提示:每次启动程序时都必须一遍又一遍地输入这些数字,您是否不恼火?对于测试,只需注释掉所有手动输入,并写rain = new double[] { 1.2, 3.4, .... };

标签: java arrays class max min


【解决方案1】:

您可以通过循环数组找到最大值或最小值。并将返回类型 void 更改为双精度,因此方法将返回最大雨量;

private static double getMaxValue(double[] rain) {

    double max=0;
    for(double i : rain){
       if(i>max){
         max=i;
       }
    }
    return max;
}

并将其用作;

System.out.println(getMaxValue(rain));

与 min 相同;

private static double getMinValue(double[] rain) {

    double min=Double.MAX_VALUE;
    for(double i : rain){
       if(i<min){
         min=i;
       }
    }
    return min;
}

但是在你的代码中有很多错误

1)

double rain[]=new double[13];

这应该是

double rain[]=new double[12];

因为这是数组长度。所以你有 12 个月。

2) 你错过了

rain [3]

3) 你分配给 13 的索引应该是 12 。

rain [13] = kenny.nextDouble();  -->  rain [12] = kenny.nextDouble();

这是完整的例子。

public class apples {

    public static void main(String[] args) {
        Scanner kenny = new Scanner(System.in);
        double rain[] = new double[12];
        double sum = 0;
        double avg = 0;
        double most = 0;
        double least = 0;

        System.out.println("Your local weather man here getting paid to tell you the wrong weather!!");
        System.out.println("");
        System.out.println("Please enter in the following rainfall for the months ahead: ");
        System.out.println("Month\tRainfall (In inches)");
        System.out.print("January: ");
        rain[0] = kenny.nextDouble();
        System.out.print("February: ");
        rain[1] = kenny.nextDouble();
        System.out.print("March: ");
        rain[2] = kenny.nextDouble();
        System.out.print("April: ");
        rain[3] = kenny.nextDouble();
        System.out.print("May: ");
        rain[4] = kenny.nextDouble();
        System.out.print("June: ");
        rain[5] = kenny.nextDouble();
        System.out.print("July: ");
        rain[6] = kenny.nextDouble();
        System.out.print("August: ");
        rain[7] = kenny.nextDouble();
        System.out.print("September: ");
        rain[8] = kenny.nextDouble();
        System.out.print("October: ");
        rain[9] = kenny.nextDouble();
        System.out.print("November: ");
        rain[10] = kenny.nextDouble();
        System.out.print("December: ");
        rain[11] = kenny.nextDouble();

        //(Or rain[] = 1,2,3,4,5,6,7,8,9,10,11,12);
        sum = rain[0] + rain[1] + rain[2] + rain[3] + rain[4] + rain[5] + rain[6] + rain[7] + rain[8] + rain[9] + rain[10] + rain[11];
        avg = sum / 12;

        System.out.println("The sum of all the rain is: " + sum);
        System.out.println("The average rainfall was:" + avg + " inches");
        most =getMaxValue(rain);
        least=getMinValue(rain);
        System.out.println("The max rain is: " + most);
        System.out.println("The min rain is: " + least);

    }

    private static double getMaxValue(double[] rain) {
        double max = 0;
        for (double i : rain) {
            if (i > max) {
                max = i;
            }
        }
        return max;
    }

    private static double getMinValue(double[] rain) {

        double min = Double.MAX_VALUE;
        for (double i : rain) {
                        System.out.println(i);
            if (i < min) {
                min = i;
            }
        }
        System.out.println(min);
        return min;
    }
}

但是你可以使用一个包含所有月份的数组。这样做的好处是你可以动态循环而不是硬绳索。当输入负数时你可以很容易地发出警告。好的方法是遵循。

public class apples {

    public static void main(String[] args) {
        Scanner kenny = new Scanner(System.in);
        double rain[] = new double[12];
        double sum = 0;
        double avg = 0;
        double most = 0;
        double least = 0;

        System.out.println("Your local weather man here getting paid to tell you the wrong weather!!");
        System.out.println("");
        System.out.println("Please enter in the following rainfall for the months ahead: ");
        System.out.println("Month\tRainfall (In inches)");

        String months[]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

        for (int i=0;i<months.length;i++) {
            System.out.println(months[i]+" :");
            double val = kenny.nextDouble();
            while(val<0){
                System.out.println("negatives not allowed ! enter again");
                val = kenny.nextDouble();
            }
            rain[i]=val;
            sum+=val;
        }

        avg = sum / 12;

        System.out.println("The sum of all the rain is: " + sum);
        System.out.println("The average rainfall was:" + avg + " inches");
        most =getMaxValue(rain);
        least=getMinValue(rain);
        System.out.println("The max rain is: " + most);
        System.out.println("The min rain is: " + least);

    }

    private static double getMaxValue(double[] rain) {
        double max = 0;
        for (double i : rain) {
            if (i > max) {
                max = i;
            }
        }
        return max;
    }

    private static double getMinValue(double[] rain) {

        double min = Double.MAX_VALUE;
        for (double i : rain) {
                        System.out.println(i);
            if (i < min) {
                min = i;
            }
        }
        System.out.println(min);
        return min;
    }
}

【讨论】:

    【解决方案2】:

    Java 8 有一种更简单的机制来处理此类数据,而无需任何循环或临时变量。

    如果您有 Java 8,则可以使用以下内容:

    double rain[] = {3, 2, 7, 9, 10};
    double totalRainfall = Arrays.stream(rain).sum;
    double maxRainfall = Arrays.stream(rain).max().getAsDouble();
    double minRainfall = Arrays.stream(rain).min().getAsDouble();
    double avgRainfall = Arrays.stream(rain).average().getAsDouble();
    

    这比传统方法更容易阅读和理解。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2015-01-12
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2018-05-03
    相关资源
    最近更新 更多