如何计算读取文件的不同数组数字



我正在做学校作业。它要求我从文件中阅读姓名和收入,并将每个家庭中的每个人放在一起以计算家庭的税款。我已经把人们放到了不同的阵列中,但是我很难计算每个家庭有多少家人。

我从看起来像这样阅读的文件:

琼斯·拉尔夫39765.45

琼斯玛丽18532.00

琼斯弗兰克0.00

汉森约翰63321.00

汉森·琳达8765.00

Murphy Jeff 53786.75

Murphy Nina 65432.00

Murphy Ellen 0.00

墨菲大卫0.00

Simon Mike 7654.00

Simon Janet 44762.00

Simon Tom 0.00

我试图将计数 插入几个地方,但它们都没有给我正确的答案。请在这里帮助我。

import java.io.*;
import java.util.Scanner;
public class caltax
{
public static void main (String[] args) 
{    
// 1. Define two arrays
String[] families = null;
double[] taxes = null;
// 2. Read file:
 try 
  {
  Scanner infile = new Scanner (new FileInputStream("family.dat"));
while (infile.hasNextLine()) 
{
    String personLastName = infile.next();
    //skip the first name 
    infile.next();
    double personTax = infile.nextDouble();
    // add person data
    if (null == families) 
    {
        // create array for
        families = new String[] { personLastName };
        taxes = new double[] { personTax };
    } 
    else 
    {
        boolean familyExists = false;
        // check existing families
        for (int i = 0; i < families.length; i++) 
        {
            if (personLastName.equals(families[i])) 
            {
                // add personTax to family owed taxes
              taxes[i] += personTax;  
                familyExists = true;
                break;
            }
        }
        if (!familyExists) 
        {
            // Extend arrays to put new family
            // create temp arrays with size+1
            String[] tmpFamilies = new String[families.length + 1];
            double[] tmpTaxes = new double[taxes.length + 1];

            System.arraycopy(families, 0, tmpFamilies, 0, families.length);
            System.arraycopy(taxes, 0, tmpTaxes, 0, taxes.length);
            // set new last elements data
            tmpFamilies[tmpFamilies.length - 1] = personLastName;
            tmpTaxes[tmpTaxes.length - 1] = personTax;
            // replace families and taxes with newly created tmp arrays
            families = tmpFamilies;
            taxes = tmpTaxes;
        }
    }//else
}// while

infile.close();
 }//try
 catch(Exception e) 
{
System.out.println(e.toString());
}//catch block 
// Print results
for (int i=0;i < families.length; i++)
{
    System.out.println("family " + families[i] + " owes $" + taxes[i]);
}
  }
}

只需添加另一个数组

...
int []familyCount = null
if (null == families) 
{
    // create array for
    families = new String[] { personLastName };
    taxes = new double[] { personTax };
    familyCount = new int[] {1};
} 
else 
{
    boolean familyExists = false;
    // check existing families
    for (int i = 0; i < families.length; i++) 
    {
        if (personLastName.equals(families[i])) 
        {
            // add personTax to family owed taxes
          taxes[i] += personTax;  
          familyCount[i] ++;
            familyExists = true;
            break;
        }
    }
    if (!familyExists) 
    {
        // Extend arrays to put new family
        // create temp arrays with size+1
        String[] tmpFamilies = new String[families.length + 1];
        double[] tmpTaxes = new double[taxes.length + 1];
        int[] tmpFamilyCount = new int[familyCount.length+1];

        ...
        System.arraycopy(familyCount, 0, tmpFamilyCount, 0, familyCount.length);
        // set new last elements data 
        ...
        tmpFamilyCount[tmpFamilyCount.length-1] = 1;
        // replace families and taxes with newly created tmp arrays 
        ...
        familyCount = tmpFamilyCount;
    }
}//else
// 1. Define two arrays
...
HashMap<String,Integer> familyMember=null;
    if (null == families) 
    {
        ...
        familyMember = new HashMap();
        familyMember.put(personLastName, new Integer(1));        
    } else {
      ....
       for (int i = 0; i < families.length; i++) 
        {
            if (personLastName.equals(families[i])) 
            {
              int totalPerson = familyMember.get(personLastName).intValue();   
              familyMember.put(personLastName, new Integer(totalPerson));
                .....
            }
        }
       if (!familyExists) 
        {
              ....
              familyMember.put(personLastName, new Integer(1));
        }
    }
  // Print Results
  for (String key : familyMember.keySet()) {
    System.out.println("family " + key + " has " + familyMember.get(key).toString() + " person");
  }

更新 - 不使用HashMap

使用有用的 split 方法

// 1. Define two arrays
...
String[] familyMember=null;
    if (null == families) 
    {
        ...
        familyMember = new String[]{personLastName +"-1"};        
    } else {
      ....
       for (int i = 0; i < families.length; i++) 
        {
            if (personLastName.equals(families[i])) 
            {
              int totalPerson = Integer.parseInt(familyMember[i].split("-")[1]);   
              familyMember[i] = families[i]+"-"+String.valueOf(totalPerson+1);
                .....
            }
        }
       if (!familyExists) 
        {
              ....
              String[] tmpFamilyMember = new String[familyMember.length + 1];
             System.arraycopy(familyMember, 0, tmpFamilyMember, 0, familyMember.length);
              tmpFamilyMember[tmpFamilyMember.length - 1] = personLastName+"-1";
           /* **UPDATE** */
           familyMember =  tmpFamilyMember;
        }
    }
  // Print Results
  for (String fam : familyMember) {
    String[] familyWithCount = fam.split("-");
    System.out.println("family " + familyWithCount[0] + " has " + familyWithCount[1] + " person");
  }

结果:

家庭琼斯欠$ 58297.45

家庭汉森欠$ 72086.0

家庭墨菲欠$ 119218.75

Family Simon欠$ 52416.0

家庭琼斯有3人

家庭汉森有2人

家庭墨菲有4人

家庭西蒙有3人

最新更新