Clasa de precipitații, găsirea maximului și a minimului dintr-o matrice (Programare, Java, Array-Uri, Clasa, Max, Min)

Kenny Bowen a intrebat.

Fac un program pentru o clasă java a mea care cere acest lucru:

Scrieți o clasă Rainfall care stochează precipitațiile totale pentru fiecare dintre cele 12 luni într-un array de duble. Programul ar trebui să aibă metode care să returneze următoarele:

  • Precipitațiile totale pentru anul
  • Precipitațiile medii lunare
  • Luna cu cele mai multe ploi
  • Luna cu cele mai puține precipitații

Demonstrați clasa într-un program complet. (Nu acceptați numere negative pentru cifrele lunare de precipitații).

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("MonthtRainfall (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));     



       }}

Am pregătit cea mai mare parte. Mă întreb doar cum să obțin „Max” și „Min” din numerele introduse.

Orice ajutor ar fi minunat!!!

Comentarii

  • Presupun că aceasta este o sarcină destinată buclelor de exersare/învățare. În caz contrar, ați putea folosi pur și simplu docs.oracle.com/javase/8/docs/api/java/java/util/… . Totuși, un indiciu general: Nu vă enervează faptul că trebuie să introduceți aceste numere din nou și din nou, de fiecare dată când porniți programul? Pentru teste, doar comentați toată introducerea manuală și scrieți rain = new double[] { 1.2, 3.4, .... }; –  > Por Marco13.
2 răspunsuri
Madhawa Priyashantha

puteți găsi max sau min prin looping array .and change return type void to double astfel încât metoda va returna max rain ;

private static double getMaxValue(double[] rain) {

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

și utilizați acest lucru ca;

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

și același lucru pentru min;

private static double getMinValue(double[] rain) {

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

dar în codul dvs. există multe greșeli

1)

double rain[]=new double[13];

acest lucru ar trebui să fie

double rain[]=new double[12];

pentru că aceasta este o lungime de matrice, deci aveți 12 luni.

2) ați omis

rain [3]

3) ați atribuit indexul 13, care ar trebui să fie 12.

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

Deci, acesta este exemplul complet.

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("MonthtRainfall (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;
    }
}

dar puteți folosi o matrice care să conțină toate lunile.avantajul acestui procedeu este că veți face bucla dinamică în loc să faceți o buclă de tip „hard cording”.și puteți avertiza cu ușurință atunci când datele introduse sunt negative.o abordare bună este următoarea.

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("MonthtRainfall (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;
    }
}

sprinter

Java 8 are un mecanism mult mai ușor pentru manipularea datelor de acest tip, fără a fi nevoie de buclă sau de variabile temporare.

Dacă aveți Java 8 puteți folosi următoarele:

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();

Este mult mai ușor de citit și de înțeles decât metoda tradițională.

Comentarii