2017-02-20 2 views
-6

Das ist hw und ich bin wirklich fest, wie ich meinen Code zurückgeben, was ich es zurückgeben möchte. Ich versuche, einen String-Wert mit einem bestimmten Indexwert zurückzugeben. Ich dachte, alles, was ich tun musste, war, den String-Wert im angegebenen Index zurückzugeben, aber ich bekomme nicht die richtige Antwort.Rückgabe eines anderen Typs als der Parameter

public void add(String candidate){ 
    if (candidate.equals(null)){ 
     throw new RuntimeException(); 
    } 
    String[] contenders = new String[candidates.length+1]; 

    // copy the array manually because I'm restricted from ArrayLists 
    for (int i = 0; i < candidates.length; i++){ 
     contenders[i] = this.candidates[i]; 
    } 
    this.candidate = candidate; 
    contenders[contenders.length-1] = this.candidate; 
    this.candidates = new String [contenders.length]; 

Nach Werte zu einem neu errichteten Array Hinzufügen der Tester will den String-Wert zu einem bestimmten Index

public String get(int index){ 
    if (index < 0 || index > candidates.length) { 
     throw new RuntimeException("Your argument was not within bounds."); 
    } 
    for (int i = index; i < candidate.length(); i++){ 
     candidate = candidates[index]; 
    } 
    return candidate; 

Ich habe gearbeitet, es bekommen, und ich konnte endlich Kandidat Stopp Zeige haben um null zu geben, gibt es den falschen Wert für den gegebenen Index, also zum Beispiel will ich 'X' bei Kandidat [3], aber ich bekomme 'Y', weil das der letzte Wert ist, den der Kandidat behält. Ich habe versucht, nur Kandidaten zurückzugeben [Index], aber dann sagt es mir, dass der Wert bei diesem Index Null ist. Als ich durch den Debugger gegangen bin, scheint es, dass mein ursprüngliches Array nicht richtig kopiert wird, aber ich bin mir nicht sicher, was ich als nächstes versuchen sollte. Danke im Voraus.

Das ist mein Konstruktor:

public CandidateList(){ 
    candidates = new String[0]; 
} 

public CandidateList(String[] candidates){ 
    this.candidates = new String[candidates.length]; 
    CandidateList candidateList = new CandidateList(); 
+3

Sie haben größere Probleme .. Code ist chaotisch und ein bisschen sinnlos –

+0

Uh ... was? Ihr Code gibt immer den letzten Wert im Array zurück. Warum brauchst du eine for-Schleife? Sie laufen solange, bis 'i Moira

+0

Wie rufen Sie den get (Index). Was meinst du mit Original-Array wird nicht richtig kopiert? Was ist kopiert, was nicht? – leoOrion

Antwort

1

Es gibt eine Menge, die in Ihrem Code verbessert werden kann, lassen Sie mich

einige Kommentare hinzufügen
public void add(String candidate){ 
    //if candidate is actually null you are calling null.equals 
    //which means this will always result in a NullPointerException 
    //you can remove this if if you want 
    if (candidate.equals(null)){ 
     throw new RuntimeException(); 
    } 

    ... 

    //think about what you are doing here, 
    //you are setting this.candidates to a new empty array 
    //(is big contenders.length, but still empty) 
    this.candidates = new String [contenders.length]; 

Zweiter Teil:

public String get(int index){ 
    //you are missing an '=' in index >= candidates.length 
    if (index < 0 || index > candidates.length) { 
     throw new RuntimeException("Your argument was not within bounds."); 
    } 
    //this for loop is wrong, you are changing 'i' but never use it.. 
    //just return candidates[index] like you said before. 
    //It was probably null because of the error above 
    for (int i = index; i < candidate.length(); i++){ 
     candidate = candidates[index]; 
    } 
    return candidate; 

Hinweis zur RuntimeException (RE): Wenn Sie eine NullPointerException (NPE) abfangen und eine RE werfen, verlieren Sie tatsächlich Informationen n (da NPE ein spezifischerer Fehler als RE ist). Wenn Sie fangen wollen/throw mindestens eine bedeutende Nachricht setzen wie „Kandidat nicht null sein kann“

Lassen Sie uns nun den Konstruktor analysieren:

public CandidateList(){ 
    candidates = new String[0]; 
} 

public CandidateList(String[] candidates){ 

    // you are doing the same error as above here: 
    // when you do this you create an EMPTY list of size candidates.lenght 
    // correct code is this.candidates = candidates 
    this.candidates = new String[candidates.length]; 

    // this is not necessary, constructors don't need to return anything, 
    //here you are just creating a new instance that will not be used anywhere 
    CandidateList candidateList = new CandidateList(); 

Konstrukteurs-Objekte zu erstellen, sie keine Daten zurück. Ich schlage vor, Sie werfen einen Blick auf diese Frage Does a Java constructor return the Object reference? und im Allgemeinen lesen Sie ein wenig mehr über Konstruktoren

+0

Ich bin neu in Java und es ist mehr als offensichtlich, dass ich nicht dem Kontrollfluss folge. Also in meinem Junit testet einer der Tests meinen Konstruktor und gibt ihm ein String-Array. Dann verwendet der Test die Methode add, um einen neuen Wert am Ende des Arrays anzuhängen. Die get-Methode sollte dann den einzelnen Zeichenfolgenwert an dem Index zurückgeben, an dem der neue Kandidat platziert wurde. Ich frage mich also, ob das Argument, das an den Konstruktor gesendet wird, nicht an String [] gesendet wird. – jamin16

+0

Vielen Dank für den Prozess und nicht darauf, wie unordentlich mein Code ist – jamin16

+0

Keine Sorge, jeder muss irgendwo anfangen :) Können Sie Ihren Konstruktor auch posten? Wenn dein Junit fehlschlägt, wäre es hilfreich, auch diesen Code zu haben. Ansonsten bitte die Antwort als akzeptiert markieren – deathyr

Verwandte Themen