2017-05-08 9 views
1

Ich habe zwei Klassen:Wie kann ich jeder Instanz einer Klasse eine eindeutige fortlaufende Nummer zuweisen?


public class Worker{ 

    String name; 

    private static int count=0; 

    public Worker(String N){ 

    name=N; 
    count++; 
    } 

    public String numberOfTime(){ 
     return name +", "+ count; 
    } 
} 

public class counting{ 

    public static void main(String[]args){ 
     Worker worker1 = new Worker("Jack"); 

     Worker worker2 = new Worker("John"); 

     System.out.println(worker1.numberOfTime()); 

     System.out.println(worker2.numberOfTime()); 
    } 
} 

Während ich bekommen (Jack, 1) und (Johannes, 2) und so weiter, er druckt (Jack , 2) und (John, 2).

Kann mir jemand erklären, wie man das ändert?

Danke.

+4

Statische Variablen gehören zum Klassenobjekt, nicht Instanzen. – Maroun

+0

Warum "John 2"? Es heißt nur einmal für "John" – Jens

+1

Ich möchte jedem Arbeiter eine Nummer geben. Der erste Arbeiter wäre die Nummer 1, während der letzte Arbeiter die Nummer n wäre. Hier jedoch gibt es mir die Anzahl der Zeit, die die Methode aufgerufen wurde (immer i). –

Antwort

3
public class Worker{ 

    String name; 
    int number; 

    private static int totalCount=0; 


    public Worker(String N){ 

    name=N; 
    totalCount++; 
    number = totalCount; 
    } 

    public String numberOfTime(){ 
     return name +", "+ number; 
    } 
} 

Versuchen Sie, diese

Sie sind nicht eine Nummer zu den Instanzen, deren Gesamtzahl zuweisen sollte

+0

Tippfehler :), Fixed es –

+1

Sie könnten die Nummer als 'Int-Nummer = totalCount ++; ' – AxelH

+0

Sie haben Recht! das macht es kürzer –

0

für jede Instanz zugewiesen von der Zahl getrennt werden, wenn Sie eine ID für jeden Arbeiter einstellen möchten sollten Sie so etwas wie dieses:

public class Worker{ 

    String name; 

    private static int count=0; 

    private int id = ++count; 

    public Worker(String N){ 
    name=N; 
    } 

    public String numberOfTime(){ 
     return name +", "+ id; 
    } 
} 
0

Der beste Weg für mich ist, einen IdGenerator als eine zusätzliche Klasse einzuführen.

public class IdGenerator { 

    private static int id =1; 

    public static int newId(){ 
     return id++; 
    } 
} 

und ändern Worker Klasse:

public class Worker{ 

    String name; 

    private int id=0; 

    public Worker(String n){ 

    name=n; 
    id = IdGenerator.newId(); 
    } 

    public String numberOfTime(){ 
     return name +", "+ id; 
    } 
} 

Es ist besser, OO-Design als sich der Zähler in dem Objekt zu integrieren.

Verwandte Themen