我是代码的初学者,所以如果我的数据结构和逻辑很糟糕,我会道歉。我需要打印每种产品的总销售额。例如,对于“mac”,它将被标记为Category 0,而“iphone”将被标记为Category 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;
}
答案 0 :(得分: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中并且本着Object Orientation的精神,Product将是它自己的类,它将@Override toString()(所有类隐式扩展java.lang.Object)或将拥有自己的类方法名为printTotalSales()...
productList.foreach( Product::printTotalSales );
答案 1 :(得分:0)
我会使用BigDecimal类而不是整数来代价。
也许值得创建额外的两个字段 - categoryName和priceList。然后你将传递不是数组,但是这个类的实例传递给你的方法
此外,您可以考虑使用varargs。这允许您根据需要使用尽可能多的输入参数(相同类型)。这是一个例子 Java: Sending Multiple Parameters to Method
答案 2 :(得分:0)
&#39; totalSale&#39;的第二个版本(前一个版本)
public static int[] totalSale( int[] mac, int[] iphone, int[] ipad, int[] ipod ){
不是最佳的,但它是正确的。它会打印出正确的值。
试试here。
输出结果为:
0类销售总额:34500美元 第1类总销售额:9500美元 第2类总销售额:4301700美元 第3类总销售额:25920美元
考虑使用Map
。这是一个使用&#39; Map&#39;:
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;
}
}