/ / Informationen im mehrdimensionalen Ersetzen - Java, mehrdimensionales Array, Format

Informationen in mehrdimensionalem Ersetzen - Java, mehrdimensionales Array, Format

Hallo, ich mache dieses Programm, das Mitarbeiter schafftund speichert ihre Informationen. Ich habe diese Methode in einer Klasse erstellt, um einige der empfangenen Informationen zu speichern, aber das Problem ist, dass sie die Informationen überschreibt, die übergeben werden. Dies ist die Methode `

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++;
}`

Auf diese Weise wird es in der anderen Klasse verwendet. Je nachdem, wie viele Mitarbeiter hinzugefügt werden, werden die Stunden der Mitarbeiter mehrmals abgefragt, und die anderen Informationen werden weitergeleitet.

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));
}

Dies ist das Ergebnis des Drucks.

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

Ich möchte auch den Ausdruck so formatieren, dass er ist

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

Dies ist die Methode, mit der das Array gedruckt wird

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

Antworten:

0 für die Antwort № 1

Es gibt ein paar Dinge, die Ihnen hier wahrscheinlich helfen können; Aber ich werde Ihre Frage Aspekt für Aspekt durchgehen.

Sie sagen, dass einige Ihrer parametrischen Daten in Ihrer Methode überschrieben werden. Dies liegt häufig daran, dass in Java alle Objektparameter übergeben werden Referenznicht durch Wert. Dies bedeutet, dass unter der HaubeDas Übergeben eines Objekts als Parameter bedeutet eigentlich nur das Übergeben eines Zeigers auf die Position im Speicher dieses Objekts. Innerhalb und außerhalb der Methode befinden sich alle Operationen auf demselben Objekt. Um dies zu umgehen, müssen Sie normalerweise etwas tun, das so genannt wird tiefes Kopierenoder Kopieren der Struktur und des Inhalts derObjekt zu einem neuen Artikel. Der andere gute Rat, den ich Ihnen geben kann, obwohl ich noch nicht sehe, wo das Problem liegt (es ist 23:18 Uhr hier), ist, die Verwendung statischer und globaler Variablen für solche Aufgaben zu vermeiden neigen dazu, sich auf solche Probleme zu stützen. Es ist besser, Ihre Methode anzupassen / umzugestalten, um einfach den Eintrag zurückzugeben, der vorgenommen werden muss, vorzugsweise in einer Sammlung anstelle eines Arrays.

Der zweite Punkt, den ich vorschlagen werde, ist für Ihre AusgabeFormatierung. Was Sie für einen solchen Fall in Betracht ziehen könnten, ist die Java-Streaming-API. Ein Stream durchläuft jedes darin enthaltene Element, führt eine Folge definierter Operationen aus und endet mit einer Terminalmethode. Sie sind neu in Java 8. Für das, was Sie tun, können Sie Folgendes tun:

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

Dies ermöglicht eine effiziente Zuordnung und Sortierung.All dies ist in der API unter dem Eintrag "Stream" dokumentiert. Für Listen und Sets (die ich auf jeden Fall über ein Array empfehle) können Sie stattdessen einfach Collection.stream () aufrufen, die alle implementieren. Bei der Bestellung geht es darum, Ihre Anrufe zu bestellen.

Ich hoffe, ich habe geholfen. Ich werde versuchen, darauf zurückzukommen, wenn ich morgen Zeit habe.