2016-11-16 26 views
0

我在java简介类中,我知道这个问题对您来说可能非常简单,但我确实需要帮助。 因此,我试图从包含名称和收入的文件中读取,并且我想将它们读入不同的数组中。阅读名称和数字混合的文件,并将它们放入不同的数组中

import java.io.*; 
import java.util.Scanner; 
public class caltax 
{ 
    public static void main (String[] args) 
    { 
    String lname[] = new String [12]; 
    String fname[] = new String [12]; 
    Double income[] = new Double [12]; 
    double sincome=0.0; 
    int i, count=1; 

try 
{ 
    Scanner infile = new Scanner (new FileInputStream("family.dat")); 

    while (infile.hasNextLine()) 
    { 

    lname[12] = infile.next(); 
    fname[12] = infile.next(); 
    income[12] = infile.nextDouble(); 

    }//while 

    infile.close(); 

}//try 
catch (Exception e) 
{ 
    System.out.println("Check the file"); 
}//catch block  

for(i=0;i<12;i++) 
{ 
if (lname[i].equals(lname[i+1])) 
{ 
    count++; 
    sincome += income[i]; 

    //object t is created and constrctor is called 
    taxcalculation t = new taxcalculation (count, lname, fname, sincome); 
    t.taxowned(); 
}//if 

}//for 
}//main 
}//class 
+3

是什么问题? – Compass

+1

你得到索引超出界限的错误,对吧?你将所有的值放在数组中的相同位置。 – Lidae

+0

问题是从文件中读取并计算一个家庭(作为整体)需要支付的税额 –

回答

1

你几乎在那里。我想这仅仅是错字LNAME [],FNAME [],收入[]中,虽然:

while (infile.hasNextLine()) 
{ 
lname[12] = infile.next(); 
fname[12] = infile.next(); 
income[12] = infile.nextDouble(); 

} //而

假设你只需要从文件中第一次12行,它必须看起来像:

int lineIdx =0; 
while (infile.hasNextLine() && lineIdx < 12) 
{ 
lname[lineIdx] = infile.next(); 
fname[lineIdx] = infile.next(); 
income[lineIdx] = infile.nextDouble(); 
lineIdx++; 
}//while 

更新时间:WOR王逻辑(请阅读代码中的评论)...抱歉延迟。

 // 1. Define two arrays 
    String[] families = null; 
    double[] taxes = null; 

    // 2. Read file: 
    while (infile.hasNextLine()) { 
     String personLastName = infile.next(); 
     // skip 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])) { 
        // got it! 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; 
      } 
     } 
    }// while 
    // Print results 
    System.out.println("Found " + families.length + " families and their taxes");  
    for (int i=0;i < families.length; i++) 
    { 
     System.out.println("family " + families[i] + " owes $" + taxes[i]); 
    } 
+0

仍然不起作用。该文件只有12行,他们看起来像“约翰史密斯23745.08”“萨莉史密斯45670.00”那么我需要将来自同一家庭的所有人,并计算这个家庭需要支付的税收 –

+0

这是不同的故事,你没有问为最初。它需要不同的方法和解决方案,3阵列相当笨拙,太离谱。总之你需要使用一个HashMap 键是姓,值是总税。然后当你从文件中读取一行取最后一个名字时,如果它已经在HasMap中,则添加值,如果它没有在Map中放入一个新的Entry。那它。最后,您将拥有一张包含家庭及其税款的地图。顺便说一句:在这种情况下,文件中有多少记录无关紧要。 – Vadim

+0

好,但我的教授在这堂课没有提及地图的任何内容,所以我假设她不希望我们这样做。有没有什么不同的方法来做到这一点? –

0

为什么要将它们读入不同的数组?这是你的任务要求吗?更好的解决方案是创建一个包含Employee等属性的对象,然后将每个Employee添加到List<Employee>

如果您问的是如何迭代添加项目到您的数组,您需要一个索引,从0开始,结束于array.length - 1.

+0

是的,我需要单独打印它们。输出应该是家庭需要支付的税额(因此团体家庭成员在一起) –

+0

,因为我需要比较姓氏,然后将同一家庭的人组合在一起来计算这个家庭欠缺的税额 –

相关问题