2013-03-18 45 views
5

我正在使用多维数组来存储特定销售人员(1至4名销售人员)销售的产品总量(产品范围为1至5)。如何遍历多维数组的列[行]

牛逼安排在1列1到4行的销售人员,以及产品ID为5

我不能做专门遍历该行获得总每种产品即第1列的唯一的事情:行1到4的总和=总产品1,列2:行1到4的总和=产品2总计等

见测试salesTest应用程序代码后跟类销售:

/* 
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 
+0

相关:通过基本方向自由遍历2D数组(向下,向上,向左,向右):http://stackoverflow.com/questions/22253140/how-to-freely-traverse-the-elements-in-a-two-dimensional -array-by-cardinal-direc – aliteralmind 2014-03-07 14:47:57

回答

20

遍历在一个二维的单行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 
+0

@shutefan重要的是最后的编辑,我发现错误准时。 – 2013-03-18 20:59:38

+0

我知道这对结果没有任何影响,但为什么不只是想想答案,然后发送......这种方式我多次重新输入评论以指出错误。 – shutefan 2013-03-18 21:01:37

+0

不过,+1的清晰简洁的解释。 – shutefan 2013-03-18 21:01:58

1

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

遍历列:

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

明白了:) 位A headwreck试图以可视化的阵列,但到了那里最终的帮助欢呼

//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 
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]表示的第1行即{13,23,45,67,56}如果需要在各个单元中的值需要迭代2为每个循环等

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