2016-04-12 12 views
0

Ich habe eine Liste von Objekten, wo der Name der Liste ist Einsätze und es hat 'n' Anzahl der Objekte Arbeitsplätze genannt.Jedes Beschäftigungsobjekt hat Variable namens Seriennummer. Jetzt muss ich Seriennummer für jedes Objekt zu erhöhen, um 11.Inkrementieren Sie den Wert jedes Objekts um 11 in einer Liste

Hier Code

for(Employment employment:employments.getEmployemnts()){ 
    if(employment="GENERAL_MANAGER"){ 
    employement.setSerialNumberForGenManager() 
    }else{ 
    employment.setSerialNumberForOthers() 
    } 

Innerhalb der employment Klasse:

public static employemntIndex=11; 

public employemnt setSerialNumberForGenManager(){ 
this.serialNumber = 0; 
} 

public employemnt setSerialNumberForOthers(){ 
this.serialNumber = employemntIndex+serialNumber; 
} 

Nun, ich bin nicht in der Lage Werte zu erhöhen, um 11 Das Ergebnis für jedes Objekt ist immer nur 11. Es wird nicht erhöht.

+0

Zuallererst kann man nicht zwischen 'Employment' Objekt und' String' Objekt vergleichen; Zweitens, um zu vergleichen, müssen Sie '==' und nicht '='; Und drittens, was ist der Anfangswert von 'this.serialNumber' für jedes Element, bevor die Schleife ausgeführt wird? –

+0

ist es Null vor Schleife für jedes Objekt – divya

+0

So bin ich verwirrt. Wenn es 0 ist und du 11 addierst, warum wären dann nicht alle 11? –

Antwort

0

Versuchen Sie, wie dieses

public static Integer employemntIndex = 0; 

    public employemnt setSerialNumberForOthers(){ 
     this.serialNumber = employemntIndex; 
     employemntIndex += 11; 
    } 
+0

jetzt, ich bekomme die Werte als 11,22,22 - für andere .. Aber ich bekomme 11,22,33 .. – divya

+0

@divya können Sie den Code aktualisieren, wie Sie Objekte erstellen – SANN3

+0

es ist der gleiche Code außer für Beschäftigungsobjekt hat eine Variable, die als public int serialNumber deklariert ist. – divya

0

Zwei mögliche Fehler:

  1. Sie verwenden einen so genannten "for-Schleife verbessert".

    Sie können die Elemente einer Sammlung auf diese Weise nicht bearbeiten, da diese Schleife schreibgeschützt ist.

    Um Elemente zu bearbeiten, müssen Sie eine for-Schleife mit einem expliziten Iterationsindex oder einem Iterator verwenden.

  2. Sie scheinen eine Referenz (Speicheradresse mit einem String zu vergleichen, die zu einer Speicheradresse entsprechen unwahrscheinlich ist.

    employment="GENERAL_MANAGER" 
    

    Sie wahrscheinlich eine Getter-Methode wie

    employment.getRole().equals("GENERAL_MANAGER") 
    
  3. zu nennen vergessen

So wäre es (wenn size() Methode nicht unterstützt wird, sollten Sie verwenden array.length)

for(int i = 0; i < employments.getEmployemnts().size(); i++) { 
if(employments[i].yourGetter().equals("GENERAL_MANAGER")){ 
    employements[i].setSerialNumberForGenManager() 
}else{ 
    employments[i].setSerialNumberForOthers() 
} 

Oder wenn Ihre Sammlung implementiert die Liste Schnittstelle

Iterator iter = employments.getEmployments().iterator(); 
while (iter.hasNext()){ 
    Employment employment = iter.next(); 
    if(employment.yourGetter().equals("GENERAL_MANAGER")){ 
    employement.setSerialNumberForGenManager() 
    }else{ 
     employment.setSerialNumberForOthers() 
    } 
} 

Hoffnung, die

bearbeiten geholfen: als KookieMonster hat bemerkt, dass Sie den Zuweisungsoperator in der IF-Bedingung verwenden Sie die Methode equals verwenden sollten

+0

Ich bin nicht in der Lage, employment.setSerialNumberForOthers() zu verwenden, dies direkt.als meine for-Schleife Implementierung hat sich geändert.Ich möchte setSerialNumberForGenManager mtd für die Employment – divya

+0

aufrufen Bitte buchen Sie die gesamte Beschäftigung Klasse. Ein Hinweis: aus dem Namen Ihrer Methoden ... setForManager() ... setForOthers() sieht es so aus, als hätten Sie einen schlechten Klassenentwurf gewählt. Sie sollten Unterklassen verwenden, aber bitte machen Sie weiter und geben Sie Ihren Code ein, damit wir ihn uns ansehen können. –

+0

Was ist Ihre gewünschte Ausgabe und welchen Fehler bekommen Sie? –

1

Dies kann an Ihrem String-Vergleich liegen. Stringvergleiche sollten die Object#equals(Object)-Methode verwenden (im Gegensatz zu ==);

if (yourString.equals("COMPARISON STRING")) //do stuff 

Dies liegt daran, String ist eine Instanz (den Text enthalten geschieht), und das die == Betreiber in diesem Fall prüft nur die Referenzen, nicht, ob die Instanzen selbst den gleichen Text enthalten.

Außerdem ist = ein Zuweisungsoperator, == sollte für die meisten Vergleiche verwendet werden (außer "Sonderfälle", wie zum Beispiel Strings vergleichen).

Das nächste Problem ist, dass Sie die Werte nicht tragen (wie Sie sagen). Um das zu beheben;

public static employemntIndex = 11; 

//Increase the employment index for each GENERAL_MANAGER 
public employemnt setSerialNumberForOthers(){ 
    this.serialNumber = employmentIndex; 
    employmentIndex += 11; 
} 
+0

das war ein guter Fang –

+0

Ich erkannte es. zu equlas mtd. Sogar nach diesem gibt es mir nur ein Ergebnis von 11,22. – divya

+0

Ich habe diese serialNumber-Variable für jeden Bewerber. Dies ist Int-Wert. So durch den Fall, es wäre Null. Ich denke, der inkrementierte Wert wird nicht beibehalten, wenn wir diesen Wert an den nächsten Antragsteller übergeben. – divya