2016-11-26 2 views
0

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

Файл, который я читаю из выглядит следующим образом:

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

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

Jones Frank 0,00

Хансен Джон 63321.00

Hansen Linda 8765.00

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

Murphy Нина 65432,00

Мерфи Ellen 0,00

Мерфи David 0,00

Simon Майк 7654,00

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

Simon Том 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

Вы просмотрели https://docs.oracle.com/javase/7/docs/api/java/util/Map. html? – Michal

+0

Видите ли, мой преподаватель никогда не преподавал нам метод MAP, поэтому я предполагаю, что она не хочет, чтобы мы использовали карту. –

+0

Почему бы не использовать другой массив для отслеживания счета для каждой семьи? –

ответ

0

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

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

Он отлично работает! и это легко! Спасибо! –

0
// 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"); 
    } 

UPDATE - Без 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

семьи Саймон обязан $ 52416.0

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

семья Hansen имеет 2 человек

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

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

+0

Привет, спасибо за ваше предложение. Но мой профессор никогда не учил нас методу MAP, так есть ли другие способы решить это? –

+0

Это только дает мне первый семейный счет –

+0

Я проверю его сейчас – mismanc

Смежные вопросы