dancingbush
dancingbush

Reputation: 2281

How to iterate through columns [rows] of a multi dimensional array

I am using a multi-dimensional array to store the total amount of product sold (products range 1 to 5) by a particular salesperson (1 to 4 salespersons).

T arranged the salesPersons in rows 1 to 4, and Product IDs in columns 1 to 5.

Only thing I can not do is iterate exclusively through the rows to get the total of each product ie column 1: sum of rows 1 to 4= Total product 1, column 2: sum of rows 1 to 4= product2 Total etc.

See test salesTest application code followed by the class Sales:

/*
test application for sales class
*/
package salestest;

import SalesLibary.Sales;


public class SalesTest {


    public static void main(String[] args) {
        // pass monthly stats to 4r(salespesons) * c5(products 1 to 5) using initialization method
        int monthlySales [][]=  {{13, 23, 45, 67, 56},
                                {43, 65, 76, 89, 90},
                                {43, 45, 76, 98, 90},
                                {34, 56, 76, 43, 87}};
        //pass default values to constructor when creating object of class
        Sales companySales = new Sales("Monneys Inc.", monthlySales);
        companySales.displayMessage();
        companySales.displaySales();
        }//end main
    }//end SalesTest class

    //class Sales with associated methods 
/*
 Chapter 7: Practical Question 2
 */
package SalesLibary;


public class Sales {

//declare fields/members
private int salesTotals[][];
private String companyName;

//passs string and two dimensional array of sales stats to constructor from application object
public Sales(String name, int monthlySales[][]) {
    companyName = name;
    salesTotals = monthlySales;


}//end constructor

public void setCompanyName(String name) {
    companyName = name;

}

public String getCompanyName() {
    return companyName;
}

public void displaySales() {
    //table heading
    System.out.printf("The monthly sales stats for company %s are: ", companyName);
    System.out.println("                                                         ");//set columns headings
    //create column headings representing products sold 1 to 5 by looping thru each colmn of row(salsperson)
    System.out.print("            ");
    for (int product = 0; product < salesTotals[0].length; product++) {
        System.out.printf("Product %d  ", product + 1);
    }
    System.out.println("Total ");

    //create rows of table represnting salespersons 1 too 4, ten loop through array and print element
    for (int salesPerson = 0; salesPerson < salesTotals.length; salesPerson++) {
        System.out.printf("SalesPerson %2d", salesPerson + 1);


        //use nested for loop to output all results
        for (int total : salesTotals[salesPerson]) {
            System.out.printf("%10d", total);
        }
        //call method to get total for each sales person by passing
        //a row of products sold for each sales person to method
        double total = getTotal(salesTotals[salesPerson]);
        System.out.printf("%10.2f\n", total);


    }//end outer for
    System.out.println("Product Total: ");
    double productSum = getTotalProduct();
    System.out.printf("%10.2f", productSum);
    //enumerate through each column and get sum to represent product total


}//end method Display sales

//method to calculate total, argument is array of results
public double getTotal(int salesTotals[]) {
    int total = 0;
    //loop thru array passed
    for (int count : salesTotals) {
        total += count;
    }

    return total;
}// end get salesPerson tital

//display message
public void displayMessage() {
    System.out.printf("\nWlecome to %s monthly sales summaries!!!\n\n", getCompanyName());
}//end display message

//get total product sold
public double getTotalProduct() {
    int productTotal[];
    int totalProduct = 0;
    //loop through array passed
    for (int salesPerson = 0; salesPerson < salesTotals.length; salesPerson++) {
        //go through each column of row[row]
        productTotal = salesTotals[salesPerson];
        //loop thirugh product total and get sum
        for (int count : productTotal) {
            totalProduct += count;
        }

    }//end outer for loop   
    return totalProduct;
}// end get salesPerson total
}//end Sales class

Upvotes: 9

Views: 99508

Answers (4)

LONGHORN007
LONGHORN007

Reputation: 546

Lets say you have a two dimensional array as

int[][] salesData={{13, 23, 45, 67, 56},
                                {43, 65, 76, 89, 90},
                                {43, 45, 76, 98, 90},
                                {34, 56, 76, 43, 87}};

so it is a 4*5 matrix

int[0] represents the the 1st row i.e the {13, 23, 45, 67, 56} if you need the value in individual cell you need to iterate 2 for each loop like

    for (int[] rowData: salesData){
                for(int cellData: rowData)
                {
System.out.printn("the indiviual data is" +cellData);
                }
            }

Upvotes: 7

dancingbush
dancingbush

Reputation: 2281

Got it:) Bit of a headwreck trying to visualise the array but got there eventually, cheers for the help

//loop thorugh each column to get total products sold
    for (int product = 0; product < salesTotals[0].length; product++) {
        int totalProduct = 0;
        for (int salePerson = 0; salePerson < salesTotals.length; salePerson++) {

            totalProduct += salesTotals[salePerson][product];

        }//end inner for
        System.out.printf("%10d", totalProduct);

    }//end outer for

Upvotes: 0

Lurvas777
Lurvas777

Reputation: 35

First off, don't use all your code if it's not needed. You only need the declaration and maybe one for-loop.

Loop through columns:

for(int i=0; i<monthlySales[salesPerson].length; i++) {
    monthlySales[i][salesPerson]; //do something with it!
}

Upvotes: 1

&#211;scar L&#243;pez
&#211;scar L&#243;pez

Reputation: 236004

To iterate over a single row k in a two-dimensional array:

for (int j = 0; j < multiarray[k].length; j++)
    multiarray[k][j]; // do something

And to iterate over a single column k in a two-dimensional array:

for (int i = 0; i < multiarray.length; i++)
    multiarray[i][k]; // do something

Upvotes: 28

Related Questions