Methoden Lotto-Programm, Methoden ordnen & umbennen

  • Themenstarter Themenstarter hüteüberhüte
  • Beginndatum Beginndatum
H

hüteüberhüte

Gast
Hallo, ich weiß nicht, wie ich die Methoden ordnen und nennen soll und ob ich
Code:
this.
obligatorisch überall schreiben sollte oder net. Das Programm sieht erst mal so aus:

Java:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
 
public class LottoZiehung {
    
    private static final Random random = new Random();
    private final int[] ziehung;
    
    public LottoZiehung(int[] ziehung) {
        if (ziehung == null || ziehung.length != 6) {
            throw new IllegalArgumentException(Arrays.toString(ziehung));
        }
        Arrays.sort(ziehung);
        if (ziehung[0] < 1 || ziehung[5] > 49) {
            throw new IllegalArgumentException(Arrays.toString(ziehung));
        }
        for (int i = 0; i < ziehung.length - 1; i++) {
            if (ziehung[i] == ziehung[i + 1]) {
                throw new IllegalArgumentException(Arrays.toString(ziehung));
            }
        }
        this.ziehung = ziehung;
    }
    
    public LottoZiehung() {
        ziehung = generiereZiehung();
    }
    
    private int[] generiereZiehung() {
        int[] ia = new int[6];
        a:
        for (int i = 0; i < ia.length;) {
            int r = random.nextInt(49) + 1;
            for (int j = 0; j < i; j++) {
                if (ia[j] == r) {
                    continue a;
                }
            }
            ia[i++] = r;
        }
        Arrays.sort(ia);
        return ia;
    }
    
    public int[] getZiehung() {
        int[] ia = new int[ziehung.length];
        System.arraycopy(ziehung, 0, ia, 0, ziehung.length);
        return ia;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final LottoZiehung other = (LottoZiehung) obj;
        if (!Arrays.equals(this.ziehung, other.ziehung)) {
            return false;
        }
        return true;
    }
    
    @Override
    public String toString() {
        return "LottoZiehung{" + "ziehung=" + Arrays.toString(ziehung) + '}';
    }
    
    public int richtige(LottoZiehung other) {
        int c = 0;
        for (int i : other.ziehung) {
            if (Arrays.binarySearch(this.ziehung, i) >= 0) {
                c++;
            }
        }
        return c;
    }
    
    public static void main(String[] args) {
        List<LottoZiehung> ziehungen = new ArrayList<LottoZiehung>();
        for (int i = 0; i < 10; i++) {
            ziehungen.add(new LottoZiehung());
        }
        
        LottoZiehung meineZiehung = new LottoZiehung(
                new int[]{1, 49, 2, 48, 3, 47});
        System.out.println("meineZiehung = " + meineZiehung);
        System.out.println("equals = " + meineZiehung.equals(new LottoZiehung(meineZiehung.getZiehung())));
        
        for (int i = 0; i < ziehungen.size(); i++) {
            System.out.println(
                    i + 1 + ": " + ziehungen.get(i)
                    + ", richtige: " + ziehungen.get(i).richtige(meineZiehung));
        }
    }
}

Danke für Hilfe
 
Moin, also was das Ordnen von Methoden angeht ist meine Herangehensweise eigentlich immer

1. main
2. sonstige Methoden
3. überschriebene Methoden

Die Sache mit dem this. nutze ich nur dann, wenn auch "Verwechslungsgefahr" mit lokalen Variable besteht.
(Hauptsächlich bei settern)

Grüße
 
Das mit dem this sehe ich auch so wie nevermind, das verwende ich eigendlich auch nur in den settern ;-)

Ich habe normalerweiße zuerst die Variablen, dann Construktoren, dann meine Funktionen und dann getter und setter und sowas.
 
Könnte
Code:
this.ziehung = ziehung;
im Konstruktor Probleme bereiten, wenn eine Konstruktor-Aufrufer im Nachhinein das übergebene Array ändert? Daran habe ich bis jetzt nicht gedacht. Der Zustand des Objekts soll nicht korrumpiert werden dürfen...
 
das stimmt, üblicherweise (wenn man das schon macht) kopiert man im Konstruktor ein eigenes Array und dann bei getZiehung() auch wie du es schon hast,
doppelte Sicherung, nichts herausgeben, nichts anderes übernehmen,
außer bei unveränderlichen Objekten wie String
 

Zurück
Oben