2014-11-15 5 views
0

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

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]); 
     } 
    } 
} 
+0

Что вы имеете в виду, если информация переписывается? Возможно, сделать их неизменными? – lenhuy2106

ответ

0

Есть несколько вещей, которые, вероятно, может помочь ты здесь; но я рассмотрю ваш вопрос по одному аспекту за раз.

Вы говорите, что некоторые ваши параметрические данные перезаписаны в вашем методе; это часто потому, что в Java все параметры объекта передаются по с ссылкой, а не на значение. Это означает, что под капотом передача объекта в качестве параметра - это просто передача указателя на местоположение в памяти этого объекта, а также внутри и снаружи метода все операции находятся на одном и том же объекте. Чтобы обойти это, вам обычно нужно сделать что-то под названием глубокое копирование или копирование структуры и содержимого объекта в новый элемент. Другой хороший совет, который я могу вам дать, хотя я не вижу, где проблема только что (здесь 11:18 вечера), заключается в том, чтобы избежать использования статических и глобальных переменных для таких задач, поскольку они имеют тенденцию приспосабливаться к таким проблемам. Лучше настроить/реорганизовать свой метод, чтобы просто вернуть запись, которая должна быть сделана, желательно в коллекции вместо массива.

Второй пункт, который я предложу, предназначен для вашего форматирования вывода. Что вы можете использовать для такого случая, как Java Streaming API. Поток выполняет итерацию по каждому элементу, который он содержит, выполняет последовательность определенных операций над ним и заканчивается терминальным методом. Они являются новыми для Java 8. Для того, что вы делаете, вы могли бы сделать что-то вроде этого:

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

Это позволяет эффективно отображения и сортировки, все из которых описаны в API под запись «поток» , Для списков и наборов (которые я рекомендую по массиву в любом случае) вы можете просто вызвать Collection.stream() вместо этого, который они все реализуют. Что касается их заказа, это вопрос упорядочения ваших звонков.

Надеюсь, я помог. Я попытаюсь вернуться к этому, когда у меня будет время завтра.

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