Отображение среднего значения рядом с массивом - PullRequest
0 голосов
/ 24 октября 2019

Я новичок в Java, поэтому извиняюсь.

У меня есть два массива:

int[] grades = {64,55,45,67,65,88};
String[] unitCode = {"APP:","BSAD:","CF","DAD:","N&CS:","POP:"};

И мне нужно привести друг друга в форму:

[APP:64, BSAD:55, CF45, DAD:67, N&CS:65, POP:88]

Мне удалось добиться этого с помощью этого кода:

    public String[] unitMarks(int[] grades, String[] unitCode) 
    {
        double sum = 0;
        for (double i : grades)
        sum += i;
        double average = (sum/grades.length);

            for (int i = 0; i <grades.length; i++)
            {
                String combination = unitCode[i]+grades[i];
                unitCode[i] = combination;

        }

            return unitCode;
    }

Но мне также нужно отобразить среднюю оценку в конце, поэтому следует сказать:

[APP:64, BSAD:55, CF:45, DAD:67, N&CS:65, POP:88, Average:64.0]

Я уже написал код для нахождения среднего значения массива оценок. У меня просто проблемы с возвратом среднего с объединенным массивом (а также с отображением «Среднее:» перед ним).

Я пытался сделать что-то вроде -

String includedAverage = unitCode+" Average:"+average;
return includedAverage;

Нозатем он начинает говорить, что не может преобразовать строку в строку []. Если я изменю тип возвращаемого метода на String, он не будет работать с этим:

System.out.println(Arrays.toString(myArrays.unitMarks(grades, unitCode)));

Любая помощь или указатели были бы хорошими. Спасибо.

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

Два способа сделать это. 1. Используйте ArrayList, размер которого увеличивается при добавлении в него элементов

public List<String> unitMarks(int[] grades, String[] unitCode) 
{
    List<String> unitCodeArrayList = new ArrayList<String>();
    double sum = 0;
    for (double i : grades)
    sum += i;
    double average = (sum/grades.length);

        for (int i = 0; i <grades.length; i++)
        {
            String combination = unitCode[i]+grades[i];
            unitCodeArrayList.add(combination);

         }
        unitCodeArrayList.add("Average:"+average);
        return unitCodeArrayList;
}

Используйте примитивный массив, но добавьте его таким образом (поскольку я не уверен, каков его размер)

public String[] unitMarks(int[] grades, String[] unitCode) 
{
double sum = 0;
for (double i : grades)
sum += i;
double average = (sum/grades.length);
for (int i = 0; i <grades.length; i++)
{
        String combination = unitCode[i]+grades[i];
        unitCode[i] = combination;
}
    String[] resUnitCode = appendArray(unitCode, "Average:"+average);
    return resUnitCode;
}
private String[] appendArray(String[] array, String x){
String[] result = new String[array.length + 1];
for(int i = 0; i < array.length; i++)
    result[i] = array[i];
result[result.length - 1] = x;
return result;
}
0 голосов
/ 24 октября 2019

Если вам нужно только отобразить значения, вы можете использовать Stream для вычисления среднего и отображения за один раз:

private void displayGradesAndAverage(int[] grades, String[] unitCode) {
    IntStream.range(0, grades.length)
            .peek(i -> System.out.print(unitCode[i] + grades[i] + ", "))
            .map(i -> grades[i])
            .average()
            .ifPresent(avg -> System.out.println("Average:" + avg));
}
0 голосов
/ 24 октября 2019

Вы можете добавить массив результатов, который имеет на один пробел больше, чем ваш unitcode массив, и назначить ему значения вместо изменения ввода:

public String[] unitMarks(int[] grades, String[] unitCode) {
    double sum = 0;
    for (double i : grades) {
        sum += i;
    }
    double average = (sum / grades.length);
    String[] result = new String[grades.length +1];
    for (int i = 0; i < grades.length; i++) {
        String combination = unitCode[i] + grades[i];
        result[i] = combination;
    }
    result[result.length-1]= "Average:"+average;
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...