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!
java matrix multidimensional-array
maggie
source share