我正在为Java编码课程制作学校项目,需要帮助
我已经导入了CSV文件,其中包含一些信息,该信息已被分离到ArrayList中,并希望对文件中的每个不同类别进行总计。
现在我的输出是:
Item | Category | Amount | Price | Location
Carrots | Food | 12 | $2 | Walmart
Potatoes | Food | 15 | $3 | Walmart
T-Shirt | Clothes | 1 | $16 | Walmart
Toothbrush | Cleaning | 2 | $2 | Walmart
我的目标是获取每个类别的小计,例如:
Item | Category | Amount | Price | Location
Carrots | Food | 12 | $2 | Walmart
Potatoes | Food | 15 | $3 | Walmart
Subtotal for Food is: $69
T-Shirt | Clothes | 1 | $16 | Walmart
Subtotal for Clothes is: $16
Toothbrush | Cleaning | 2 | $2 | Walmart
Subtotal For Cleaning is: $4
,然后最终将全部内容汇总并显示如下:
Item | Category | Amount | Price | Location
Carrots | Food | 12 | $2 | Walmart
Potatoes | Food | 15 | $3 | Walmart
Subtotal for Food is: $69
T-Shirt | Clothes | 1 | $16 | Walmart
Subtotal for Clothes is: $16
Toothbrush | Cleaning | 2 | $2 | Walmart
Subtotal For Cleaning is: $4
Total is: $89
这是我的代码:
public static void main(String[] args) {
ArrayList<output> csvstuff = new ArrayList<output>();
String fileName = "Project2.csv";
File file = new File(fileName);
try {
Scanner inputStream = new Scanner(file);
while(inputStream.hasNext()) {
String data = inputStream.next();
String[] values= data.split(",");
String Item = values[0];
String Category = values[1];
String Amount = values[2];
String Price = values[3];
String Location = values[4];
String format = "%-10s |%10s |%10s |%10s |%10s\n";
System.out.printf(format, values[0], values[1], values[2], values[3], values[4]);
output _output = new output(Item,Category,Amount,Price,Location);
csvstuff.add(_output);
}
inputStream.close();
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:0)
代替在循环中读取值时打印值,而是将其添加到arraylist中。然后根据类别类型对数据进行排序。请参阅Java中的comparable
和comparator
。
现在,您可以简单地遍历列表,并继续计算每个类别的小计。
有用的链接:Comarator v/s Comparable
答案 1 :(得分:0)
按类别对所有行进行排序。
遍历排序后的列表并保留小计。
如果某个项目与上一个项目不在同一类别中,则发出小计行并清除小计值。 (您还必须在最后一行之后执行一次。)
然后发出一行描述当前行。
要发出总计,只需保留另一个总计,每行更新一次,从不清除。