如何遍历多维数组的列[行]

时间:2013-03-18 20:49:17

标签: java

我使用多维数组来存储特定销售人员(1到4名销售人员)销售的产品总量(产品范围1到5)。

T将salesPersons排列在第1行到第4行,将Product ID排列在第1到5列。

我唯一不能做的就是遍历各行以获得每个产品的总数,即第1列:第1行到第4行的总和=总产品1,第2列:第1行到第4行的总和=产品2总计等

请参阅测试salesTest应用程序代码,然后是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

4 个答案:

答案 0 :(得分:21)

迭代二维数组中的单行k

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

迭代二维数组中的单个列k

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

答案 1 :(得分:6)

假设你有一个二维数组

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

所以它是一个4 * 5矩阵

int [0]代表第一行,即{13,23,45,67,56},如果您需要单个单元格中的值,则需要为每个循环迭代2,如

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

答案 2 :(得分:1)

首先,如果不需要,请不要使用所有代码。你只需要声明,也许只需一个for循环。

循环列:

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

答案 3 :(得分:0)

知道了:) 有点像海难试图想象阵列,但最终到达那里,欢呼帮助

//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