多维替换中的信息

时间:2014-11-15 05:59:26

标签: java multidimensional-array format

我正在制作这个创建员工并保存信息的程序。我在一个类中创建了这个方法来存储它收到的一些信息,但问题是,它会覆盖传入的信息。这就是方法`

int employeeSize = 1;

public void employeeInfo(int ID , double hours, int salary){
    double [][] empInfo = new double[employeeList.size()][3];
        for(int row = 0; row < empInfo.length; row++){
            empInfo[ID-1][0] = ID;  

        }
        for(int row = 0; row < empInfo.length; row++){
                empInfo[ID-1][1] = hours;

        }
        for(int row = 0; row < empInfo.length; row++){
                empInfo[ID-1][2] = Double.parseDouble(f.format(getPay(hours, salary)));

        }
        //if(employeeSize == employeeList.size()){
            printInfo(empInfo);
            totalPay(empInfo);
            totalHours(empInfo);
        //}
            employeeSize++;
    }` 

这是它在其他课程中使用的方式,它根据员工的加入时间多次询问员工的工作时间,并通过其他信息。

for(int i = 0; i <employeesToAdd; i++){
    double hours = getADouble(scanner, "\nEnter the hours for "+employees.names(i)+": > ");
    employees.employeeInfo(employees.id(i), hours,employees.getSalary(i));
}

这是打印的结果。

Enter the hours for j: > 42
1.0 42.0    1757.21 0.0 0.0 0.0
This is the total pay: 1757
This is the total hour: 42.0
Enter the hours for d: > 41
0.0 0.0 0.0 2.0 41.0    1296.88
This is the total pay: 1296
This is the total hour: 41.0

我想将打印格式化为

Enter the hours for j: > 42
Enter the hours for d: > 41

1.0 42.0    1757.21
2.0 41.0    1296.88
This is the total pay: 3054
This is the total hour: 83.0

这是打印数组的方法

public void printInfo(double[][]array){
    for(int i = 0; i < array.length; i++){
        for(int j = 0; j < array[i].length; j++){
            System.out.print("\t"+array[i][j]);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

有一些事情可能对你有所帮助;但是,我会一次一个方面回答你的问题。

你说你的方法会覆盖你的一些参数数据;这通常是因为,在Java中,所有对象参数都是通过引用传递的,而不是通过 value 传递的。这意味着,在引擎盖下,将对象作为参数传递实际上只是将指针传递给该对象的内存中的位置,并且在该方法的内部和外部,所有操作都在同一个对象上。要解决这个问题,您通常需要执行一项名为深度复制的操作,或者将对象的结构和内容复制到新项目中。我可以给你的另一个好建议,虽然我还没有看到问题在哪里(这里是晚上11:18),是为了避免使用静态和全局范围变量来完成任务因为他们倾向于倾向于这样的问题。最好调整/重构您的方法,只需返回必须输入的条目,最好是在集合中而不是数组中。

我建议的第二项是输出格式。对于像这样的情况,您可能会考虑使用Java Streaming API。流迭代它包含的每个项目,对其执行一系列已定义的操作,并以终端方法结束。他们是Java 8的新手。对于您正在做的事情,您可能会这样做:

 Arrays.stream(array).forEach(a -> Arrays.stream(a).forEach(a2 -> System.out.print("\t" + item))

这允许有效的映射和排序,所有这些都在条目&#34; Stream&#34;下的API中记录。对于列表和集合(我建议在任何事件中使用数组),您只需调用Collection.stream(),它们都可以实现。至于他们的订购,这是订购电话的问题。

我希望我能帮到你。我明天有空的时候会尝试回到这里。