Find the sum of a two-dimensional java array

I am working on a project where I need to read a file and inject the contents into a 2D array. Then I have to summarize each row, each column and matrix perimeter. Everything still works for me, except for the perimeter. I am trying to create separate loops for the top row, bottom row and middle of two outer columns.

The matrix file is as follows:

1 2 3 4 2 4 6 8 2 4 6 8 3 2 3 4 

Therefore, the perimeter should be up to 42. Right now I can successfully add the first row and the last row equal to 22. However, when I add columns to this sum, I get 32.

Here is the code:

 import java.util.*; // Scanner class import java.io.*; // File class public class Lab10 { static public void main( String [ ] args ) throws Exception { if ( args.length != 1 ) { System.out.println("Error -- usage is: java Lab10 matdataN.txt"); System.exit( 0 ); } //Requirement #1: first int value: # of rows, second int value: # of cols File newFile = new File(args[0]); Scanner in = new Scanner(newFile); int numRows = in.nextInt(); int numCols = in.nextInt(); //Requirement #2: declare two-d array of ints int[][] matrix; matrix = new int[numRows][numCols]; //Requirement #3 & 4: read file one line at a time (nested for loops //and nextInt()) and print for (int i = 0; i < numRows; i++) { for (int j = 0; j < numCols; j++) { matrix[i][j] = in.nextInt(); System.out.print(matrix[i][j]+ " "); } System.out.println(); } //Requirement #5: traverse each row and sum the values and display the sums int rowTotal = 0; for (int i = 0; i < numRows; i++) { rowTotal = 0; for (int j = 0; j < numCols; j++) { rowTotal += matrix[i][j]; } System.out.println("Sum for row = " + rowTotal); } //Requirement #6: traverse each column and sum the values and display the sums int colTotal = 0; for (int i = 0; i < numRows; i++) { colTotal = 0; for (int j = 0; j < numCols; j++) { colTotal += matrix[j][i]; } System.out.println("Sum for col = " + colTotal); } //Requirement #7: traverse the perimeter and sum the values and display the sum //sum bottom row matrix int perTotal = 0; for (int i = (numRows-1); i < numRows; i++) { perTotal = 0; for (int j = 0; j < numCols; j++) { perTotal += matrix[i][j]; } } //sum + top row matrix for (int i = 0; i < numRows - (numRows-1); i++) { for (int j = 0; j < numCols; j++) { perTotal += matrix[i][j]; } System.out.println("Sum of perimeter = " + perTotal); } // sum + first col middle for (int i = 1; i < (numRows-1); i++) { for (int j = 0; j < numCols - (numCols-1); j++) { perTotal += matrix[j][i]; } System.out.println("Sum = " + perTotal); } // sum + last col middle for (int i = 1; i < (numRows-1); i++) { for (int j = (numCols-1); j < numCols; j++) { perTotal += matrix[j][i]; } System.out.println(perTotal); } } 

I would be very grateful if someone could help me calculate the middle of the first and last columns (should be 2 + 2 and 8 + 8). Or if you have a better way to find the perimeter. Thanks in advance!

+2
java matrix multidimensional-array
source share
8 answers

I recommend you do this as follows:

 int perTotal = 0; // top and bottom row for (int c = 0; c < numCols; c++) perTotal += matrix[0][c] + matrix[numRows-1][c]; // left and right column for (int r = 1; r < numRows-1; r++) perTotal += matrix[r][0] + matrix[r][numCols-1]; // output System.out.println("Perimeter=" + perTotal); 
+2
source share

Here is your method:

 public static int perimeter(int[][] array) { int perimter = 0; for (int i = 0; i < array[0].length; i++) { perimter += array[0][i] + array[array.length - 1][i]; } for (int r = 1; r < array.length - 1; r++) { perimter += array[r][0] + array[r][array[0].length - 1]; } return perimter; } 

And here is your test with the array you provided:

public static void main (String [] args) {System.out.println (perimeter (new int [] [] {{1, 2, 2, 3}, {2, 4, 4, 2}, {3, 6 , 6, 3}, {4, 8, 8, 4}})); }

Output: 42

+2
source share

There is a la4j library (Linear Algebra for Java) that handles this task in version 0.4.0 (currently available on GitHub: https://github.com/vkostyukov/la4j , will be available on Maven this summer). So here is a quick example:

 Matrix a = new Basic2DMatrix(...); // creates a real matrix // calculates the sum of '1' row double d1 = a.foldRow(1, Matrices.asSumAccumulator(0)); // calculates the sum of '2' double d2 = a.foldColumn(2, Matrices.asSumAccumulator(0)); // the helper class that fetches border elements of matrix class PerimeterFetcher implements MatrixFunction { private int rows; private int columns; public PerimeterFectcher(int rows, int columns) { this.rows = rows; this.columns = columns; } @Override public double evaluate(int i, int j, double value) { return i == 0 ? value : j == 0 ? value : (i + 1) == rows ? value : (j + 1) == columns ? value : 0; } } // calculates the perimeter of matrix double p = a.fold(Matrices.asSumFunctionAccumulator(0, new PerimeterFetcher(a.rows(), a.columns()))); 

UPD . The next version of la4j (0.4.5) supports the sum() method for matrices and vectors:

 Matrix a = new Basic2DMatrix(...); double s = a.sum(); // wrapper around a.fold(...); 
+2
source share
  //Requirement #7: traverse the perimeter and sum the values and display the sum int perTotal = 0; // First line for (int j = 0; j < numCols; j++) { perTotal += matrix[0][j]; } // If there is only one line, then it is done. if (numRows > 1) { // Last line for (int j = 0; j < numCols; j++) { perTotal += matrix[numRows-1][j]; } // Other lines for (int i = 1; i < numRows -1); i++) { perTotal += matrix[i][0] + matrix[i][numcols -1]; } } //Perimeter System.out.println("Perimter="+perTotal); 
+1
source share

Just do the following:

  for (int i = 0; i < ROWS; i++){ for (int j = 0; j < COLUMNS; j++){ sum = sum + myArray[i][j]; } } System.out.print(sum); 

That should give you the amount.

+1
source share

Thank you all! such an easier way to do this. fyi: I finished doing

  int perTotal = 0; for (int i = 0; i < numCols; i++) { perTotal += matrix[0][i] + matrix[numRows-1][i]; } for (int j = 1; j < numRows-1; j++) { perTotal += matrix[j][0] + matrix[j][numCols-1]; } System.out.println("Perimeter = " + perTotal); 
0
source share

Try the following:

 import java.util.Scanner; public class TwoDarray { public static void main(String[] args) { Scanner scn=new Scanner(System.in); System.out.print("Enter the first Rows of Array :"); //Input first Rows and Columns int row1 = scn.nextInt(); System.out.print("Enter the first columns of Array:"); int col1 = scn.nextInt(); System.out.print("Enter the second Rows of Array :"); //Input second rows and column int row2 = scn.nextInt(); System.out.print("Enter the second columns of Array:"); int col2 = scn.nextInt(); int arr1[][] = new int[row1][col1]; // Input the elements in first row and column System.out.println("Enter the elements in First row and column"); for(int i=0;i<row1;i++) { for(int j=0;j<col1;j++) { arr1[i][j]=scn.nextInt(); } } int arr2[][] = new int[row2][col2]; // Input the elements in second row and column System.out.println("Enter the elements in second row and column"); for(int i=0;i<row2;i++) { for(int j=0;j<col2;j++) { arr2[i][j]=scn.nextInt(); } } System.out.println("Output of first row and column is "); //output of first row and column for(int i=0;i<row1;i++) { for(int j=0;j<col1;j++) { System.out.print(arr1[i][j]+" "); } System.out.println(); } System.out.println("output of secound row and column"); //out put of second row and column for(int i=0;i<row2;i++) { for(int j=0;j<col2;j++) { System.out.print(arr2[i][j]+" "); } System.out.println(); } //sum of first and second row and column int sum[][] = new int[row1][col1]; for(int i=0;i<row1;i++) { for(int j=0;j<col1;j++) { sum[i][j]=arr1[i][j]+arr2[i][j]; } } System.out.println("sum of two matrix output"); //sum of two matrix output for(int i=0;i<row1;i++) { for(int j=0;j<col1;j++) { System.out.print(sum[i][j]+" "); } System.out.println(); } } } 
0
source share

You can simply use:

 static int sumMultiArray(int[][] array) { int sum = 0; for (int[] ints : array) { for (int number : ints) { sum += number; } } return sum; 

}

0
source share

All Articles