Печать увеличенного индекса строки и среднего значения в 2D-массиве

#java #arrays #multidimensional-array #average #increment

#java #массивы #многомерный массив #среднее #увеличение

Вопрос:

У меня есть 2D-массив из 4 тестов, по 5 баллов за штуку. Мне нужно распечатать среднее значение, к какому тестовому номеру оно относится. Мне также нужно, чтобы номера тестов были 1-4 вместо 0-3.

Я не уверен, как перенумеровать тесты и заставить их печатать читаемый номер:

 int[][] testScores = {
        {100, 85, 91, 75, 82}, 
        {81, 75, 68, 92, 87}, 
        {99, 71, 75, 84, 91}, 
        {97, 91, 68, 72, 83}};

for (int i = 0; i < testScores.length; i  ) {
    int sum = 0;
    for (int j = 0; j < testScores[i].length; j  ) {
        sum  = testScores[i][j];
    }

    System.out.println("Average of Test#"   testScores[i]
              "is "   sum / testScores[i].length);
    System.out.println();
}
  

Мой конечный результат должен быть чем-то вроде:

Тест # I имеет среднее значение J, где I начинается с 1 и переходит в 4.

Скорее всего, мне потребуется добавить дополнительные тесты позже по мере разработки, но я уверен, что смогу справиться с этим, как только смогу отсортировать это. Заранее ценю помощь!

Комментарии:

1. Просто замените testScores[i] на i

2. Это здорово! Но теперь мне нужно, чтобы оно было 1-4 вместо 0-3. Как я могу этого добиться? Спасибо за вашу помощь.

3. Кажется, я понял. Я мог бы просто добавить это: int testNumber = i 1; System.out.println(«Среднее значение теста #» testNumber «is » sum / TestScores[i].длина); System.out.println();

Ответ №1:

Вы можете выполнить итерацию по range индексам строк этого массива и для каждой строки объединить в один entry увеличенный индекс строки и ее average значение. Ваш код может выглядеть примерно так:

 int[][] testScores = {
        {100, 85, 91, 75, 82},
        {81, 75, 68, 92, 87},
        {99, 71, 75, 84, 91},
        {97, 91, 68, 72, 83}};

IntStream.range(0, testScores.length)
        // Stream<Map.Entry<Integer,Double>>
        .mapToObj(i -> Map.entry(
                // number of the line of scores
                i   1,
                // average value for this line
                Arrays.stream(testScores[i])
                        .average().orElse(0)))
        // output
        .forEach(System.out::println);
  
 1=86.6
2=80.6
3=84.0
4=82.2
  

Ответ №2:

Согласно комментарию Ника, testScores[i] необходимо изменить на i и увеличить testScores соответственно на номер теста, что должно быть сделано таким образом:

 int testNumber = i   1;
System.out.println("Average of Test#"   testNumber
          " is "   sum / testScores[i].length);
System.out.println();