2016-10-21 5 views
1

Ich bin Anfänger auf objektorientierte Programmierung und versuche etwas zu konstruieren, das einem grundlegenden Stimmzähler ähnelt, der einen int Parameter nehmen sollte, der eine Wahl von zwei Kandidaten darstellt und die Wahlergebnisse druckt zum Terminalfenster. allerdings Wie kann ich meinen Code für diese Aufgabe verbessern?

Die Methode, nach der ich suche, sollte auch eine Zeichenfolge zurückgeben, die Informationen über den Erfolg oder Misserfolg der Stimmabgabe gibt. "Ihre Stimme wurde abgegeben “„ungültige Wahl, werfen keine Abstimmung“

ich habe eine Klasse und die Konstrukteure erstellt und auch einige grundlegende get-Methoden implementiert.

ich frage mich, wie ich über die Verwirklichung dieses Ziels gehen sollte, wenn auch durch eine bedingte Anweisung oder mit einer Art von fortschrittlichen Methode.

jede Hilfe in Bezug auf die Syntax oder den breiteren Ansatz würde geschätzt werden.

public class VoteCounter { 
    private String candidate1; 
    private String candidate2; 
    private int candidate1Votes; 
    private int candidate2Votes; 
    private boolean completed; 

    public VoteCounter(String candidate1, String candidate2) { 
     this.candidate1 = candidate1; 
     this.candidate2 = candidate2; 
     this.candidate1Votes = 0; 
     this.candidate2Votes = 0; 
     this.completed = false; 
    } 

    public VoteCounter() { 
     this("CANDIDATE 1", "CANDIDATE 2"); 
    } 


    public String getCandidate1() { 
     return this.candidate1; 
    } 


    public String getCandidate2() { 
     return this.candidate2; 
    } 


    public Boolean getCompleted() { 
     return this.completed; 
    } 


    public void setCompleted (boolean completed) { 
     this.completed = completed; 
    } 
}  
+1

Ihr Titel stimmt nicht überein, da Sie keine Methode verbessern möchten, möchten Sie den Code für Ihre Aufgabe. Bitte entfernen Sie auch den Kommentar '// oder könnte implementieren als:' weil 'dies (" CANDIDATE 1 "," CANDIDATE 2 ");' ist bereits eine saubere und nette Implementierung. – Tom

+0

Ich stimme für das Schließen dieser Frage als Off-Topic, weil diese Art von Fragen unter http://codereview.stackexchange.com/ – Jens

+1

meine Entschuldigung gefragt werden sollte. brandneu auf der Website. –

Antwort

1

So ähnlich?

private String vote(int choice) 
{ 
    if(choice == 1) 
    { 
    candidate1Votes++; 
    } 
    else if(choice == 2) 
    { 
    candidate2Votes++; 
    } 
    else 
    { 
    return "invalid choice, no vote cast"; 
    } 
    return "your vote has been cast"; 
} 
1

Ich würde das auf eine allgemeinere Weise tun, Vermeidung von Code-Duplizierung und erlauben, die Anzahl der Kandidaten leicht zu ändern. Lassen Sie sich also eine Klasse Vote ähnlich wie Ihre VoteCounter machen, aber nur für einen Kandidaten, mit folgenden Feldern:

private String candidate; // init this in constructor 
private int candidateVotes; // initially 0, so no need to init 

und mit Stimme() -Methode wie in anderer Antwort, aber auch ohne candiadate, so:

public void vote() { 
    candidateVotes++; 
} 

Dann können Sie Klasse VoteCounter machen, die eine beliebige Anzahl von Kandidaten nehmen und sie in Array oder Map behalten wird.

Map<Integer, Vote> votes = new HashMap<>(); 

dann bist du zu schaffen Abstimmung Methode mit Wahl:

public void vote(int choice) { 
    votes.get(choice).vote(); 
} 

Dann werden alle übrig bleiben, ist durch Ihre Stimmen Karte iterieren und den mit größter Anzahl von Stimmen zu finden.

+0

schätze dies. –

Verwandte Themen