@Amigo2019

Почему не выводит средние значения строк и столбцов?

Добрый вечер!
Метод принт не выводит средние значения колонок и столбцов.Кажется чтото не так в методе принт или меан,чего то не хватает..
import java.util.Scanner;

    public class TwoDimensionalArray {
        //создание и заполнение массива
        static double[][] createRandomArray(int size) {
            double[][] da = new double[size][size];
            for(int i=0; i<da.length; i++) {
                for(int j=0; j<da[i].length; j++) {
                    da[i][j] = (Math.random()*100);
                }
            }
            return da;
        }
        //задание найти среднее арифметическое - сумма всех чисел деленная на их количество
        static double mean(double[] onearray) {
            double total=0;
            int totallength = 0;
            for(int i=0;i<onearray.length;i++) {
                 {
                    total += onearray[i];
                    totallength++;
                }
            }
            return total/(totallength);
        }
        //print
        static double[][] print(double[][] da){
            for(int i=0; i<da.length; i++) {
                for(int j=0; j<da[i].length; j++) {
                    System.out.print(da[i][j] + "\t");
                    System.out.println("Среднее значение "+"["+i+"]"+" строки: "+"["+mean(double[] (da)[i]+"]");
                    System.out.println("Среднее значение "+"["+j+"]"+" cтолбца "+"["+mean(double[] (da)[j]+"]");
                }
                System.out.println();
            }
            return da;
        }
        //майн
        public static void main(String args[]) {
            Scanner num = new Scanner(System.in);
            System.out.println ("Введите размер матрицы ");
            int size= num.nextInt();//считывает число и присваивает значение в size
            System.out.println("Вы ввели  размер "    +size);
            System.out.println("Матрица :  " );
            double[][] array=new double[size][size];
            array = createRandomArray(size);
            print(array);
        }
    }

Буду рад любой помощи! Спасибо!
  • Вопрос задан
  • 166 просмотров
Решения вопроса 2
@Ksushqa
Unity developer
Это мое видение ситуации. Язык C#, если что.

// MeanLineValue вернет массив, состоящий из чисел, каждое из которых – среднее значение по строке
    public float[] MeanLineValue(float[,] array)
    {
        // Создаем массив нужной длины (т.е. такой длины, сколько строк нам нужно обсчитывать)
        float[] values = new float[array.GetLength(0)];
        // Складываем значения
        for (int i = 0; i < array.GetLength(0); i++)
        {
            for (int j = 0; j < array.GetLength(1); j++)
            {
                values[i] += array[i, j];
            }
            // Ищем среднее для каждой строки
            values[i] /= array.GetLength(1);
        }
        // Возвращаем массив со средними значениями по строкам
        return values;
    }


// Создаем массив
int size = 3;
float[,] array = new float[size, size * 2];
// Заполняем рандомными значениями
for (int i = 0; i < array.GetLength(0); i++)
    {
        for (int j = 0; j < array.GetLength(1); j++)
        {
            array[i, j] = Random.value * 10f;
         }
    }
// Выводим средние по строкам
for (int i = 0; i < size; i++)
{
    Debug.Log(MeanLineValue(array)[i]);
}
Ответ написан
Комментировать
DennisKingsman
@DennisKingsman
Студент
1)
static double mean(double[] onearray) {
            double total=0;
            int totallength = 0;
            for(int i=0;i<onearray.length;i++) {
                 {
                    total += onearray[i];
                    totallength++;
                }
            }
            return total/(totallength);
        }

Если я не ошибаюсь totallength у вас будет равен onearray.length по итогу , так что наверное можно просто делить на onearray.length
2) в качестве параметра передаваемого в mean не надо передавать тип ( тип указываем только в сигнатуре самого метода) + скобочка пропущена из-за чего он не распознает число
Так не надо:
System.out.println("Среднее значение "+"["+i+"]"+" строки: "+"["+mean(double[] (da)[i]+"]");
                    System.out.println("Среднее значение "+"["+j+"]"+" cтолбца "+"["+mean(double[] (da)[j]+"]");

Так надо:
System.out.println("Среднее значение " + "[" + i + "]" + " строки: " + "["+ mean(da[i])+ "]");
                System.out.println("Среднее значение " + "[" + j + "]" + " cтолбца " + "["+ mean(da[j]) +"]");

3) в майне вы выделяете память под массив с длиной и шириной(типо используете конструктор), а потом применяете функцию createRandomArray(size) (которая типо и есть конструктор для вашей матрицы уже определенной вами) , так что вместо этого
double[][] array=new double[size][size];
            array = createRandomArray(size);

можно написать просто
double[][] array = createRandomArray(size);
4)в методе mean у вас среднее значение строки считается нормально 1 потом 2 потом 3 , а вот значение среднее столбца считается 1 при подсчете первой строки, 1 и 2 столбца отдельно при подсчете второй строки 1, 2 ,3 столбца при подсчете 3 строки, подумайте как это исправить, это не сложно
5) ну и ставьте пожалуйста пробелы между знаками и прочим)) (и разбивайте строки)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы