[英]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.