Я делаю школьное задание. Он требует, чтобы я прочитал имена и доход из файла и собрал всех членов одной семьи вместе для расчета семейного налога. Я уже распределил людей по разным массивам, но мне трудно сосчитать, сколько членов семьи есть в каждой семье.

Файл, который я читаю, выглядит так:

Джонс Ральф 39765,45

Джонс Мэри 18532,00

Джонс Фрэнк 0.00

Хансен Джон 63321.00

Хансен Линда 8765.00

Мерфи Джефф 53786,75

Мерфи Нина 65432.00

Мерфи Эллен 0.00

Мерфи Дэвид 0.00

Саймон Майк 7654.00

Саймон Джанет 44762,00

Саймон Том 0.00

Я пытался вставить count ++ в несколько мест, но ни одно из них не дало мне правильного ответа. Пожалуйста, помогите мне здесь.

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]);

}
  }
}
0
Hanna Peng 26 Ноя 2016 в 21:20

2 ответа

Лучший ответ

Просто добавьте еще один массив

...
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
0
Angel Koh 27 Ноя 2016 в 06:38
// 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

С полезным метод разделения

// 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

Семья Саймона должна $ 52416.0

В семье Джонса 3 человека

В семье Хансен 2 человека

В семье Мерфи 4 человека

Семья Саймона 3 человека

0
mismanc 27 Ноя 2016 в 13:56