2014-12-06 5 views
0

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

import java.util.Scanner; 

public class SumColumnElements { 
    public static void main(String[] args) { 
    double[][] matrix = new double [3][4]; 

    Scanner input = new Scanner(System.in); 
    System.out.println("Enter " + matrix.length + " rows and " + matrix[0].length + " columns:"); 
    for (int row = 0;row < matrix.length; row++) { 
     for (int column = 0; column < matrix[row].length; column++) { 
     matrix[row][column] = input.nextDouble(); 
     } 
    } 
    sumColumn(matrix,0); 
    } 
    public static double sumColumn(double[][] m, int columnIndex) { 
     double total = 0; 
     for (int column = 0; column <= columnIndex; column++) { 
      total = 0; 
      for (int row = 0; row < m.length; row++) { 
      total += m[row][column]; 
      //System.out.println("The sum for column "+column+" until row "+row+" is " + total); 
      }    
     System.out.println("The sum for column "+ column + " is " + total);    

     } 
     return total; 
} 
} 
+0

Любой конкретный язык? –

+0

Я использую DrJava. –

+0

Вы поместили четыре команды println сразу после друг друга; поскольку 'total' не изменяется между этими строками, одно и то же значение используется на каждом выходе. Должна быть только одна команда println, а индекс столбца (0,1,2,3) не должен быть закодирован, а выбран из переменной 'column'. –

ответ

0

Вы печатаете все значения сразу после друг друга. что вы ожидаете от результатов:

System.out.println("The sum for column 0 is " + total); 
System.out.println("The sum for column 1 is " + total); 
System.out.println("The sum for column 2 is " + total); 
System.out.println("The sum for column 3 is " + total); 

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

Это, вероятно, будет одна строка:

public static void main(String[] args) { 
    double[][] matrix = new double [3][4]; 

    Scanner input = new Scanner(System.in); 
    System.out.println("Enter " + matrix.length + " rows and " + matrix[0].length + " columns:"); 
    for (int row = 0;row < matrix.length; row++) { 
     for (int column = 0; column < matrix[row].length; column++) { 
     matrix[row][column] = input.nextDouble(); 
     } 
    } 
    System.out.println(sumColumn(matrix,3)); 
    } 

public static double sumColumn(double[][] m, int columnIndex) { 
    double total = 0; 
    for (int column = 0; column <= columnIndex; column++) { 
     total = 0; 
     for (int row = 0; row < m.length; row++) { 
      total += m[row][column]; 
     } 
     System.out.println("The sum for column " + column + " is " + total); 
    } 
    return total; 
} 

Вход:

1 2 3 4

5 6 7 8

9 0 1 2

Выход:

The sum for column 0 is 15.0 
The sum for column 1 is 8.0 
The sum for column 2 is 11.0 
The sum for column 3 is 14.0 
14.0 

Я также был бы упущением, если бы я не указывал на то, что ваше имя метода «sumColumn» и имеет единственное значение, возвращаемое double. Если вы хотите, чтобы это возвращало только один столбец, вы должны переосмыслить параметры, которые вы передаете, и способ, которым вы суммируете все столбцы.

0

вы должны написать заявление печати только один раз, поскольку он будет печатать один раз для каждого цикла столбцов. Во-вторых, если вы получаете тот же ответ, который означает, что вы печатаете для первого цикла внешнего for с таким же значением, а затем ваш внешний цикл останавливается. проверьте, что такое значение columnIndex. попробуйте этот код

double total = 0; 
for (int column = 0; column <= columnIndex; column++) { 
    total = 0; 
    for (int row = 0; row < m.length; row++) { 
    total += m[row][column]; 
    } 
    System.out.println("The sum for column " + column + " is " + total); 
} 
+0

Это дает сумму для первого столбца, что я уже имел , Мне нужны другие три столбца. –

+0

@ChristopherBasinski, потому что ваш внешний цикл не работает после первого столбца, проверьте, что такое значение 'columnIndex', потому что это максимальный предел для цикла. – Abhay

+0

Я добавил остальную часть программы, не указано в столбцеIndex в основном методе, или мне нужно переместить его? –

0

Я считаю, это то, что ваш код должен быть, если вы пытаетесь напечатать сумму каждого столбца (до й строк)

public static sumColumn(double[m][n] data) { 

     for (int column = 0; column < m; column++) { 
      // store the total value of column 
      double total = 0; 
      for (int row = 0; row < n; row++) { 
      total += data[row][column]; 
      //System.out.println("The sum for column "+column+" until row "+row+" is " + total); 
      }    
     System.out.println("The sum for column "+ column + is " + total);    

     } 
} 

Update: Это должно подводить итог для каждого столбец предоставил doublematrix. Вместо печати, если вы хотите, чтобы вернуть данные к вызываемому абоненту метод магазина в общей сложности массива [] в соответствующем индексе столбца

public static double[] sumColumn(double[m][n] data) { 

      // store the total value of column..default will be 0 
      double total[] ; 
     for (int column = 0; column < m; column++) { 

      for (int row = 0; row < n; row++) { 
      total[column] += data[row][column]; 
      //System.out.println("The sum for column "+column+" until row "+row+" is " + total); 
      }    
     System.out.println("The sum for column "+ column + is " + total[column]);    

     } 
    return total; 
} 

Здесь «0» означает, что 1-й столбец и так далее до «м-1» означает, что м столбец

+0

Это еще только 1 столбец. –

+0

@ Кристофер Басински Я переработал его, посмотри на него сейчас –

0

Программа выглядит правильно для меня для большинства деталей. Вот некоторые мелкие недочеты:

import java.util.Scanner; 

public class SumColumnElements { 

    public static final int ROW = 3; 
    public static final int COLMN = 4; 

    public static void main(String[] args) { 
    double[][] matrix = new double [ROW][COLMN]; 

    Scanner input = new Scanner(System.in); 
    System.out.println("Enter " + matrix.length + " rows and " + matrix[0].length + " columns:"); 
    for (int row = 0;row < matrix.length; row++) { 
     for (int column = 0; column < matrix[row].length; column++) { 
     matrix[row][column] = input.nextDouble(); 
     } 
    } 
    sumColumn(matrix, COLMN); 
    } 
    public static double sumColumn(double[][] m, int columnIndex) { 
    System.out.println("columnIndex: " + columnIndex); 
    double total = 0; 
    for (int column = 0; column < columnIndex; column++) { 
     total = 0; 
     for (int row = 0; row < m.length; row++) { 
     total += m[row][column]; 
     } 
     System.out.println("The sum for column "+ column + " is " + total); 
    } 
    return total; 
    } 
} 

Для конкретного входа:

1 2 3 4 

5 6 7 8 

9 10 11 12 

Выход будет:

The sum for column 0 is 15.0 
The sum for column 1 is 18.0 
The sum for column 2 is 21.0 
The sum for column 3 is 24.0 
Смежные вопросы