Java 如何从一个文件中汇总服务和服务总成本?
输出:Java 如何从一个文件中汇总服务和服务总成本?,java,file-io,Java,File Io,输出: import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class logBook { public static void main(String[] args) throws FileNotFoundException { File inputFile = new File("C:\\Users\\Nick Tat
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class logBook
{
public static void main(String[] args) throws FileNotFoundException
{
File inputFile = new File("C:\\Users\\Nick Tate\\Desktop\\Log.txt");
try{
Scanner in = new Scanner(inputFile);
while(in.hasNextLine())
{
in.useDelimiter(";");
String clientName = in.next();
String serviceCost = in.next();
String serviceSold = in.next();
String serviceDate = in.next();
double cost = Double.parseDouble(serviceCost.trim());
System.out.print(clientName);
System.out.printf("%8.2f", cost);
System.out.print(serviceSold);
System.out.print(serviceDate);
}
in.close();
}
catch(FileNotFoundException e){
e.printStackTrace();
}
}
}
到目前为止,我已经成功地从我的文件中读入了每个项目,并解析了相应的变量。我现在需要计算单独服务类别(即晚餐、会议等)的总成本。我该怎么做呢?我想添加if()子句来检查每个服务,例如
- John 25.00 Dinner Aug 12 2013
- Bob 200.00 Conference Sep 11 2013
- Clara 450.00 Lodging Oct 25 2013
- Jamie 900.00 Lodging Oct 28 2013
- Rachel 89.00 Dinner Nov 11 2013
- Richard 1000.00 Conference Dec 17 2013
- Nick 2500.00 Dinner Jan 05 2014
但是,我如何将相应的价格添加到该类别中?有什么指导吗?
我最终需要将这些总数写入另一个名为outputLogBook.text的文件。您可以执行以下操作:
if(serviceSold.equals("Dinner")
{ int sum = 0
dinnerTotal = sum++
}
import java.util.Scanner;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Map;
公共课日志
{
公共静态void main(字符串[]args)引发FileNotFoundException
{
File inputFile=新文件(“C:\\Users\\Nick Tate\\Desktop\\Log.txt”);
尝试
{
扫描仪输入=新扫描仪(输入文件);
Map services=newhashmap();
while(在.hasNextLine()中)
{
in.useDelimiter(“;”);
字符串clientName=in.next();
字符串serviceCost=in.next();
字符串servicesaled=in.next();
字符串serviceDate=in.next();
Double cost=Double.parseDouble(serviceCost.trim());
系统输出打印(客户端名称);
系统输出打印F(“%8.2f”,成本);
系统输出打印(服务已售出);
系统输出打印(服务日期);
if(服务集装箱(服务售出))
{
服务。出售(服务出售,(双倍)服务。获得(服务出售)+成本);
}
其他的
{
服务出售(服务出售,成本);
}
}
for(Map.Entry:services.entrySet())
{
系统输出打印项次(输入);
}
in.close();
}
catch(filenotfounde异常)
{
e、 printStackTrace();
}
}
}
我对Map没有做太多的工作,但是我对它有些熟悉。初始Map services子句是否应该在try语句之前?还有for(…)的内部内容是什么?是否有其他方法可以在不实现Map类的情况下完成此任务?更新了答案。是的,但对于给定的场景,这似乎是最干净和最有效的。我明白了。那么,我会为每个服务运行一个单独的if-else循环吗?它需要一个列表或许多顺序循环,每个循环都跟在代码后面。坚持并坚持使用Map
s。为什么这个问题被否决了两次?
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Map;
public class logBook
{
public static void main(String[] args) throws FileNotFoundException
{
File inputFile = new File("C:\\Users\\Nick Tate\\Desktop\\Log.txt");
try
{
Scanner in = new Scanner( inputFile );
Map<String, Double> services = new HashMap<String, Double>();
while( in.hasNextLine() )
{
in.useDelimiter(";");
String clientName = in.next();
String serviceCost = in.next();
String serviceSold = in.next();
String serviceDate = in.next();
Double cost = Double.parseDouble (serviceCost.trim() );
System.out.print(clientName);
System.out.printf("%8.2f", cost);
System.out.print(serviceSold);
System.out.print(serviceDate);
if ( services.containsKey( serviceSold ) )
{
services.put( serviceSold, (Double) services.get( serviceSold ) + cost );
}
else
{
services.put( serviceSold, cost );
}
}
for( Map.Entry<String, Double> entry : services.entrySet() )
{
System.out.println(entry);
}
in.close();
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
}
}