Массив 2-D в java

#java #loops #row #nested-loops

Вопрос:

Я хочу написать программу на Java, которая выводит среднее значение каждой строки двумерного массива, но она работает только с первой строкой. Я не знал, в чем проблема.

Это и есть код:

     int [][] A = new int[r][c];

    for (int i=0;i<A.length;i  )
    {
        System.out.println("Enter the elements of the row number: " (i 1));
        for (int j=0; j<A[i].length;j  )
            A[i][j]=kbd.nextInt();
    }

    int sum = 0, avg =0;
    for (int i=0; i<A.length;i  )
    {
        for (int j=0; j<A[i].length;j  ) {
            sum  = A[i][j];
            avg = sum/A[i].length;
        }
        
        System.out.println("The average of the row number: " (i 1) " is: " avg);
    }

}
 

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

1. Обратите внимание, что Java и JavaScript-это два совершенно разных языка программирования.

2. Вы меняетесь avg внутри цикла, поэтому имеет значение только последнее изменение, которое, я уверен, не то, чего вы хотите.

3. Вам нужно переместить переменные sum и avg внутри цикла или вернуть им значение 0 после внутреннего цикла. Кроме того, среднее значение должно быть типа double. Прямо сейчас вы производите целочисленное деление.

4. Вы используете целочисленное деление для своего среднего значения. Кроме того, вам нужно сбросить сумму до нуля, прежде чем начинать с новой строки.

Ответ №1:

Вам нужно сбрасывать сумму до нуля каждый раз, когда вы выполняете цикл. Это можно исправить, объявив переменную sum внутри цикла for, а не снаружи. Также среднее значение и сумма должны быть двойными вместо int:

 for (int i=0; i<A.length;i  )
{
    double sum = 0;
    double avg =0;
    for (int j=0; j<A[i].length;j  ) {
        sum  = A[i][j];
        avg = sum/A[i].length;
    }
    
    System.out.println("The average of the row number: " (i 1) " is: " avg);
}
 

Ответ №2:

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

 int sum = 0, avg =0;
    for (int i=0; i<A.length;i  )
    {
        sum = 0;

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

        avg = sum/A[i].length;
        
        System.out.println("The average of the row number: " (i 1) " is: " avg);
    }
 

Ответ №3:

 for (int i=0; i<A.length;i  )
{
    double sum = 0;
    double avg =0;
    for (int j=0; j<A[i].length;j  ) {
        sum  = A[i][j];
        avg = sum/A[i].length;
    }
    
    System.out.println("The average of the row number: " (i 1) " is: " avg);
}
 

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

1. avg = sum/A[i].length; не входит во внутренний цикл. В противном случае среднее значение вычисляется бессмысленно A[i].length - 1 много раз.

Ответ №4:

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

 for(int row = 0; row < A.length; row  ) {
  double avg = Arrays.stream(A[row]).boxed().collect(averagingInt(i -> i));
  System.out.println("The average of the row number: "   (row   1)   " is: "   avg);
}