簡體   English   中英

如何在一個方法中為多個數組創建一個foreach循環?

[英]How do I create a foreach loop for multiple arrays in a method?

我是代碼的初學者,所以如果我的數據結構和邏輯不佳,我深表歉意。 我需要打印出每種產品總銷售額 例如,對於“ mac”,它將被標記為類別0,而“ iphone”將被標記為類別1。

我在將類別的索引位置與每個類別的總和匹配時遇到麻煩。 我真的只需要某種for循環。 我意識到我可以制作2D數組,也可以使用intstream,但我還沒有學過。 這只是代碼的一部分,因此使用2D數組確實會使事情復雜化。

現在,我正在嘗試以下方法:

public static int[] totalSale( int[] mac, int[] iphone, int[] ipad, int[] ipod ){
    int[] totalSale = {0,0,0,0};
    int sum = 0;
    for (int i : mac) {
        sum += i;
    }
    for (int i = 0; i < totalSale.length; i++) {
        System.out.println("Total sale for category " + i + ": $" + sum);
    }
    return totalSale;
}

您可以嘗試創建更通用/可重用的方法。 讓您的方法一次只計算一種產品的總銷售額。

public static int totalSale( int[] salesFigures )
{
    int totalSale = 0;
    // calculate total sale of one product only. HINT: salesFigures.length
    return totalSale;
}

您可以將所有產品數組存儲在ArrayList中,然后在循環內調用totalSale()。

for(/*number of products*/)
{
    //totalSales(productArray);
}

看看java.util.Collections的文檔–當讀取這樣的內容時,foreach循環將變得更加有用...

for( Product prod : productList ) // for each product in productList
{
    System.out.println( totalSales(prod) );
}

...在Java 8中,本着對象定向的精神,Product將是其自己的類,並且將@Override toString()(所有類都隱式擴展java.lang.Object )或具有其自己的名為printTotalSales()的方法。 ..

productList.foreach( Product::printTotalSales );

我會使用BigDecimal類而不是ints來提高價格。

同樣值得創建帶有兩個字段的附加類-categoryName和priceList。 然后,您將不傳遞數組,而是將此類的實例傳遞給您的方法

另外,您可以研究使用varargs。 這使您可以根據需要使用任意數量的輸入參數(相同類型)。 這是一個Java示例:向方法發送多個參數

“ totalSale”的第二個版本(較早的版本)

public static int[] totalSale( int[] mac, int[] iphone, int[] ipad, int[] ipod ){

不是最佳選擇,但它是正確的。 它將打印出正確的值。
在這里嘗試。

輸出為:

0類的總銷售額:34500美元
第1類的總銷售金額:$ 9500
類別2的總銷售金額:4301700美元
第3類的總銷售金額:$ 25920

考慮使用Map 這是使用“地圖”的實現:

import java.util.HashMap;
import java.util.Map;

public class Test{

    public static void main(String[] arguments) {

        //map category to sales values
        Map<String, int[]> salesMap = new HashMap<>();

        //map category to sales totals
        Map<String, Integer> totalSalesMap = new HashMap<>();

        int[] mac = {11500,9000,13000,900,100};//total 34500
        salesMap.put("Mac",mac);
        int[] iphone = {1100,5000,3400,0,0};//total $9500
        salesMap.put("Iphone",iphone);
        int[] ipad = {900,4300000,0,800,0};
        salesMap.put("Ipad",ipad);
        int[] ipod = {0,300,120,500,25000};
        salesMap.put("Ipod",ipod);

        totalSalesMap = totalSale(salesMap);

        //print totals:
        for( String category : totalSalesMap.keySet()){
            System.out.println("Total sale for category "
                            + category + ": $" + totalSalesMap.get(category));
        }
    }

    public static Map<String, Integer> totalSale(Map<String, int[]> salesMap){

        //returned map holding sales totals
        Map<String, Integer> totalSalesMap = new HashMap<>();

        //iterate over sales map and sum values into totalSalesMap
        for( String category : salesMap.keySet()){

            int[] sales = salesMap.get(category);
            int salesSum = sumArray(sales);

            //add total to returned map
            totalSalesMap.put(category, salesSum);
        }

        return totalSalesMap;
    }

    private static int sumArray(int[] array) {

        int sum = 0;
        for(int i : array) {
            sum += i;
        }

        return sum;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM