2015-02-08 91 views
-1
public class AccountRecord { 
    public static final int MAXEMPLOYEES = 2; 
    public static void main(String[] args) { 
    String[] strTemp = new String[MAXEMPLOYEES]; 
    Double[] hourTemp = new Double[MAXEMPLOYEES]; 
    Double[] rateTemp = new Double[MAXEMPLOYEES]; 
    EmployeeData[] employeeRec = new EmployeeData[MAXEMPLOYEES]; 
    EmployeeFile getEmployee = new EmployeeFile(); 
    int count; 

    getEmployee.openFile(); 
    getEmployee.readFile(); 
    getEmployee.closeFile(); 

    for(count = 0; count < MAXEMPLOYEES; count++) { 
     employeeRec[count] = new EmployeeData(); 

     strTemp[count] = getEmployee.getFullName(count); 
     hourTemp[count] = getEmployee.getHours(count); 
     rateTemp[count] = getEmployee.getRate(count); 

     employeeRec[count].setName(strTemp[count]); 
     employeeRec[count].setHours(hourTemp[count]); 
     employeeRec[count].setRate(rateTemp[count]); 
     employeeRec[count].setGross(); 
     employeeRec[count].setTax(); 
     employeeRec[count].setNet(); 
    } 

以上是我的主要文件的一部分。通过多种方法的java数组


所以我想要的是持有一个帐户的数组,并在该帐户内持有雇员的全名,小时和payrate。我从中读取并输入文件,并将这些输入存储到全名字符串数组中,以及数小时和薪水的双精度数组。

我得到的问题是在我的“EmployeeData工作”目标文件:

当我尝试设置全名,小时,payrate并打印出这些价值观,我得到一个空值。

P.S.这是我第一次在stackoverflow上,我第一次请求帮助代码。如果这是非常糟糕的格式,我很抱歉,如果您需要我,我会立即为您解决问题。我目前正在自学Java,所以我还没有完全掌握这门语言。谢谢。

编辑:@racraman我已经设法解决了我以前的问题,现在只是一个关于效率的快速答案。正如你在上面的代码中看到的,我将'getEmployee'的值存储到我的临时数组(strTemp,hourTemp,rateTemp)中以保存它们,然后将这些值存储到'employeeRec [count]'中。有一个更好的方式去了解什么,我想在这里做任何想法

+0

您是否尝试过使用调试器找到发生什么事情? – Jens 2015-02-08 08:07:23

+0

代码中存在高度可疑的'* /'。另外,你永远不会改变'记录'。编辑此项,确保您的代码正确 – laune 2015-02-08 08:19:53

回答

0

几个问题:?

  • 首先,我注意到一个最终意见“* /”你后第一个for循环(与 System.out.println(“输入名和姓:”);)。我认为这个循环应该注释掉 - 是吗?

  • 其次 - 听起来很小,但最好早点用标准来获取 - 在Java中,类名称是“camel-case” - 即。每个单词的开头都是大写 - 所以“EmployeeData”而不是“employeedata”。同上变量名称,除了它们有小写字母 - 例如“firstName”

实际的问题是,您有EmployeeData“做”太多 - 它既是文件,也是每个员工的值。所以,当你这样做时: r.openFile(); r.readFile(); r.closeFile();

您正在将文件读入变量“r”。但是,这些值对于“employee [record]”变量不可用,因为它们是与“r”无关的不同对象。

什么,你应该做的是分裂EmployeeData工作分为两大类: - 类EmployeeFile封装所有的文件处理,并 - 类员工持有的属性为每个员工

+0

是的。第一个循环应该被注释掉,因为我一开始就是从键盘输入的,但是想要尝试文件输入。因此,如果我使用2个类,我是否需要公开声明我的变量,以便两个类都可以访问对方? – byu2899 2015-02-08 22:09:32

+0

你会有几个选择。我不喜欢公共变量 - 这暴露了班级的“机制”。相反,想想这个类是什么 - 这是调用者使用这个类的原因。然后揭露该行为为公共方法(一种很好的做法是有一个明确的“公共接口” - 谷歌“节目,以一个接口”),保持变量和它是如何做它作为私人资料。例如,您可以拥有“Employee getEmployee(int recNum)”,或者可以为每个字段分别设置不同的获取者 - 无论这种情况是否合理。 – racraman 2015-02-08 23:51:06