Как я могу исправить мой скрипт, чтобы он работал в правильном порядке? - PullRequest
0 голосов
/ 04 ноября 2018

Программа должна вернуть

Результаты тестов в порядке убывания: (баллы) (В среднем)

Результат, который я получаю:

Среднее значение (среднее). Результаты тестов в порядке убывания: (результаты)

Как я могу это исправить, чтобы получить правильный возврат

import java.util.Scanner;

public class Average
{
    private int[] data;
    private double mean;

    public Average()
    {
        data = new int[5];
        int number = 0;
        int Temp = 0;
        String[] Scores = new String[5];
        Scanner keyboard = new Scanner(System.in);

        for(int index = 0; index < data.length; index++)
        {
            number++;
            System.out.print("Enter test score #" + number + ":");
            Temp = keyboard.nextInt();
            data[index] = Temp;
        }

        selectionSort();
        calculateMean();
    }

    public void selectionSort()
    {
        int n = data.length;

        for(int index = 0; index < n-1; index++)
        {
            int min_idx = index;
            for(int j = index+1; j < n; j++)
                if(data[j] >= data[min_idx])
                    min_idx = j;

            int temp = data[min_idx];
            data[min_idx] = data[index];
            data[index] = temp;
        }
    }

    public String toString()
    {
        String MyScore = "Your test scores in descending order are: " +     "\n";

        for(int index = 0; index < data.length; index++)
        {
            MyScore += data[index] + " ";
        }
        return MyScore;
    }

    public void calculateMean()
    {
        int Sum = 0;
        int Mean = 0;

        for(int index = 0; index < data.length; index++)
        {
            Sum += data[index];
        }
        Mean = Sum/data.length;
        System.out.println("The average is " + mean);
    }
}

Что бы мне пришлось поменять местами, чтобы сделать эту работу?

Редактировать: Средний класс используется в этом файле

public class AverageDriver
{
    public static void main(String[] args)
    {
         Average MyScores = new Average();
        System.out.print(MyScores);
    }
}

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Вы должны звонить calculateMean() только после звонка toString().
Таким образом, вы можете изменить конструктор

selectionSort();
System.out.println(toString());
calculateMean();

или вызов только selectionSort(); в конструкторе, затем в вашем main

public class AverageDriver
{
    public static void main(String[] args)
    {
         Average myScores = new Average();
         System.out.print(myScores);
         myScores.calculateMean();
    }
}

Кстати, вы должны использовать строчные буквы для переменных, это исправит ошибку в calculateMean(): вы звоните System.out.println("The average is " + mean);, но переменная Mean.

0 голосов
/ 04 ноября 2018
public static void main(String[] args)
{
    Average MyScores = new Average();
    System.out.print(MyScores);
}

При создании экземпляра Average вызывается конструктор. В конструкторе есть вызов calculateMean(), который печатает

Среднее (среднее)

Когда вы печатаете MyScores, вызывается переопределение toString(), которое печатает. Результаты тестов в порядке убывания: (Счета).

Убрать вызовы методов из конструктора (они не должны быть там в первую очередь) и вызывать их из main

public static void main(String[] args)
{
    Average myScores = new Average();
    System.out.print(myScores);
    myScores.selectionSort();
    myScores.calculateMean();
}
0 голосов
/ 04 ноября 2018

Ошибка, почему не выводится правильное среднее значение, заключается в следующем:

public void calculateMean() {
    int Sum = 0;
    int Mean = 0;

    for (int index = 0; index < data.length; index++) {
        Sum += data[index];
    }
    Mean = Sum / data.length;
    System.out.println("The average is " + mean);
}

Вы печатаете mean, который определен глобально, но никогда не инициализируется, поэтому по умолчанию он равен 0. В этом методе у вас есть переменная Mean (с большой буквы), которая является переменной, в которой хранится фактическое значение, это переменная, которую вы хотите напечатать.

...