(Java) Mission d'analyse statistique


Je travaille actuellement sur un programme conçu pour effectuer une analyse statistique. Plus précisément, je veux qu'il stocke des entiers aléatoires (disons 10, entre min et max inclus) dans un tableau, calcule le min, max, mode et quelques autres valeurs via des méthodes distinctes, et donne à l'utilisateur un menu avec lequel choisir une méthode (et revenir au menu, s'ils le font) ou quitter.

Mes plus gros problèmes en ce moment sont que le programme principal nécessite deux entrées pour effectuer tout méthode (ne fait rien après avoir mis le premier), et aussi que chaque méthode renvoie 0 ou 0.0.

Voici mon code:

import java.util.Random;

public class Stats extends Main
{
    int sampleSize;
    double count;
    double ave;
    double sum;
    int min;
    int max;
    int mode;
    int evenCount;
    int oddCount;
    int countMatching;

    //Constructor: use an RNG to generate sampleSize integers between minValue and maxValue. Store the numbers in an array named 'data'.
    public Stats()
    {
        sampleSize = 10;
        data = new int[sampleSize];

        for (int i = 0; i < sampleSize; i++)
            {
                Random rand = new Random();
                data[i] = rand.nextInt((max - min + 1) + min);
            }
        return;
    }
    //Method: return the sample set's max value
    public int getMax()
    {
        max = data[0];
        for(int i = 0; i < sampleSize; i++)
        {
            if (data[i] > max)
                max = data[i];
        }
        return max;
    }
    //Method: return the min value
    public int getMin()
    {
        min = data[0];
        for(int i = 0; i < sampleSize; i++)
        {
            if (data[i] < min)
                min = data[i];
        }
        return min;
    }
    //Method: return the average value
    public double getAve()
    {
        count = sampleSize;
        sum = 0;
        for(int i = 0; i < sampleSize; i++)
        {
            sum = sum + data[i];
        }
        ave = sum / count;
        return ave;
    }
    //Method: return the mode; in case of a tie, choose the smallest value
    public int getMode()
    {
        int popularity1 = 0;
        int popularity2 = 0;
        int array_item;
        for(int i = 0; i < sampleSize; i++)
        {
             array_item = data[i];
             for(int j = 0; j < sampleSize; j++)
             {
                if(array_item == data[j])
                     popularity1++;
             }
                if(popularity1 >= popularity2)
                  {
                  mode = array_item;
                  popularity2 = popularity1;
                  }
        }
        return mode;
    }
    //Method: return the count of even numbers
    public int getEven()
    {
        int evenCount = 0;
        for (int i = 0; i < sampleSize; i++)
        {
            if (data[i] % 2 == 0)
                evenCount++;
        }
        return evenCount;
    }
    //Method: return the count of odd numbers
    public int getOdd()
    {
        int oddCount = 0;
        for (int i = 0; i < sampleSize; i++)
        {
            if (data[i] % 2 != 0)
                oddCount++;
        }
        return oddCount;
    }
    //Display all numbers, formatted in columns (hint: pg. 158)
    public void displaySampleSet()
    {
        for (int i = 0; i < sampleSize; i++)
        {

        }
    }
    //Return the count of numbers in the sample set that match the input parameter
    public int countMatching(int match)
    {
        int countMatching = 0;
        return match;
    }
    //Create a list of private variable(s) that belong to the Stats class
    private int[] data;

}

Et voici le programme principal:

import java.util.*;

public class Main 
{
    public static void main(String[] args) 
    {
        int input;
        int stats;
        Scanner keyboard = new Scanner(System.in);

        Stats g = new Stats();
        System.out.println("Welcome to the Stats Program!");
        System.out.println();
        System.out.println("Main Menu");
        System.out.println();
        System.out.println("1) Get max value");
        System.out.println("2) Get min value");
        System.out.println("3) Get the mean");
        System.out.println("4) Get the mode");
        System.out.println("5) Get the count of even numbers");
        System.out.println("6) Get the count of odd numbers");
        System.out.println("7) Display the sample set");
        System.out.println("8) Return the count of numbers in the sample set that match the input parameter");
        System.out.println("9) Exit");
        System.out.println();
        stats = keyboard.nextInt();
        while (stats != 9)
        {
            if (stats == 1)
            {
                g.getMax();
                input=keyboard.nextInt();
                System.out.println("Max is: " + g.getMax());
            }
            else if (stats == 2)
            {
                g.getMin();
                input=keyboard.nextInt();
                System.out.println("Min is: " + g.getMin());
            }
            else if (stats == 3)
            {
                g.getAve();
                input=keyboard.nextInt();
                System.out.println("Mean is: " + g.getAve());
            }
            else if (stats == 4)
            {
                g.getMode();
                input=keyboard.nextInt();
                System.out.println("Mode is: " +g.getMode());
            }
            else if (stats == 5)
            {
                g.getEven();
            }
            else if (stats == 6)
            {
                g.getOdd();
            }
            else if (stats == 7)
            {
                g.displaySampleSet();
            }
            else if (stats == 8)

        System.out.println("");
        System.out.println("View other stats?");
        System.out.println("");
        System.out.println("1) Max 2) Min 3) Mean 4) Mode 5) Count of evens 6) Count of odds 7) Sample set numbers 8) Count of numbers that match input parameter 9) Exit");
        stats = keyboard.nextInt();
        }
        System.out.println("Thank you for using the Stats Program. See you next time!");
    }

}

Les deux programmes sont incomplets, mais j'obtiens toujours des valeurs pour chaque méthode (après deux entrées), des boucles après leur exécution, et la sortie fonctionne comme prévu.

Des conseils ou des pièces qui sont manifestement erronés / manquants? J'aimerais vraiment comprendre.

Merci d'avance!

Author: Suraj Sood, 2015-03-23

1 answers

Lorsque vous créez un Stats, le tableau de données est immédiatement initialisé dans le constructeur à l'aide de la max et min champs. Mais ceux-ci sont nuls à ce stade (parce que vous les laissez vides, et Java initialise les déclarations vides int à zéro). Vous appelez ensuite votre générateur de nombres aléatoires:

data[i] = rand.nextInt((max - min + 1) + min);

min et max sont nuls, donc cela évalue à:

data[i] = rand.nextInt(1);

Et Random.nextInt()renvoient des valeurs allant jusqu'à, mais sans inclure, l'entrée (voir la documentation ).

Donc votre'aléatoire' les données seront toujours des zéros; par conséquent, le minimum, le maximum et la moyenne sera également zéro.

 1
Author: DNA, 2015-03-23 21:03:58