2016-10-08 83 views
0

我是一名初學者,所以我很抱歉,如果我的數據結構和邏輯是不好的做法。我需要打印出每個產品的總銷售額。例如,對於「MAC」將它標記爲類別0,而「iphone」將被標記爲1類。如何爲一個方法中的多個數組創建一個foreach循環?

我無法匹配的類別與每個相應的類別的總和的索引位置。我真的只需要一些for循環。我意識到我可以製作二維數組以及使用intstream,但我還沒有知道它。這只是代碼的一部分,所以使用二維數組會使事情變得複雜。

現在,我正嘗試以下操作:

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; 
} 
+0

你似乎是假設所有的數組'INT [] MAC,INT [] iphone,INT [] iPad上,INT [] ipod'具有相同的長度。是這樣嗎?他們代表什麼? – Alain

+0

@ lain對不起。我添加了示例輸入值。但是陣列應該代表列出的日期的成本列表 – SSW

+0

當您運行第一個版本時會得到什麼錯誤? – Alain

回答

0

第2版(較早的企業之一)的「totalSale」

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

不是最佳,但它是正確的。它會打印出正確的值。
嘗試一下here

的輸出是:

總銷售爲0類別:$ 34500
總銷售1類別:$ 9500
總銷售2類:$四百三萬一千七
總銷售3類:$ 25920

考慮使用Map。下面是使用 '地圖' 的implmentation:

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; 
    } 
} 
+0

它的工作原理!但問題是如果有超過4個輸入值 - 它不能正確打印。所以這是無用的,因爲這些方法應該能夠輸入多達31個值。 – SSW

+0

如果它適用於4,它將爲31工作。您需要將31個數組傳遞給'totalSale'並使int [] totalSale大小爲31.非常麻煩當然,因此我建議使用map。 – c0der

+0

我添加了一個使用'Map'的實現,它更具有可擴展性。 – c0der

0

我會用BigDecimal類,而不是整數的stroing價格。

另外也許值得創建額外的類蒙道兩個字段 - categoryName和priceList。然後,你會通過不列,但這個類的實例,以你的方法

此外,您可以考慮使用可變參數。這允許您使用盡可能多的(相同類型的)輸入參數。這裏是一個例子 Java: Sending Multiple Parameters to Method

1

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

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和麪向對象的精神,產品將是它自己的類,它會@Override的toString()(所有的類都隱式擴展java.lang.Object)或將有它自己的方法稱爲printTotalSales()...

productList.foreach(Product::printTotalSales); 
相關問題