Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从一个文件中汇总服务和服务总成本?_Java_File Io - Fatal编程技术网

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();
      }  
   } 
}