2017-02-19 1 views
0

Also mache ich ein einfaches Projekt für meine CS II-Klasse und wir müssen JOptionPane verwenden, um alle Informationen aus, anstatt Scanner . Ich weiß nicht, ob dies für mich das Problem verursacht oder ob wir 4 Klassen, eine Haupt-, eine GUI-Klasse, eine Controller-Klasse und eine Model-Klasse verwenden müssen.Beim Hinzufügen zu einem Array mit einer for-Schleife, er ersetzt alles im Array, bevor es

Dies ist der Code in meiner Modellklasse, ich versuche, ein Array aller Standorte zu erstellen, die der Benutzer durch JOPtionPane in der GUI-Klasse eingibt. Es geht also durch den Controller und in die Modellklasse.

Also im Code fragt es nach einem Ort, und dann möchte ich es zum Array hinzufügen. Ich verstehe vollständig, warum dieser Code jedes Element des Arrays durch den letzten eingegebenen Ort ersetzt, weil es immer die volle for-Schleife ausführt, wenn es einen Ort bekommt. Ich weiß einfach nicht, wie ich dieses Problem lösen soll! Jede Hilfe würde ausgelöst werden. Dank

public void addLocation(String location) { 
    for (int i = 0; i < locations.length; i++) { 
     locations[i] = location; 
    } 
} 
+4

Was meinst du mit "_it_ läuft die volle Schleife für jedes Mal, dass es einen Ort bekommt"? Sie sind der Code-Writer und Sie haben eine for-Schleife geschrieben, die jedes Element im Array ersetzt. Wenn Sie nicht jedes Element im Array ersetzen möchten, schreiben Sie keine for-Schleife, die alle Elemente im Array ersetzt. –

Antwort

0

Ofc es tut, Standorte [i] i nicht das Zeichen an Ort zurückkehren, gibt es die Zeichenfolge, die auf true interpretiert wird, weil es gesetzt ist, die als 1 interpretiert wird, so dass Ihre Funktion nur Sätze Standorte [1] = "Standort".

Sie benötigen eine Zeichenfolge in ein Array von Zeichen drehen zunächst so etwas wie dies mit:

String str = "lcoation"; 
char[] charArray = str.toCharArray(); 

und dann über das Array Looping.

0

Sie können etwas entlang der Linien von diesem tun:

//iterator attribute to keep track of current index 
private int iterator = 0; 

public void addLocation(String location) { 
    //insert our location at the index indicated by our iterator 
    locations[iterator] = location; 

    //increment our iterator so we use the next position on the next function call 
    iterator++; 
} 
+0

Ohne ordnungsgemäße Indexprüfung würde sich ein solcher Code mit ArrayIndexOutOfBoundsException zerreißen, wenn ** iterator ++ ** den Wert ** überschreitet oder gleich ist locations.length ** – ShayHaned

+0

Wahr, im endgültigen Programm würden Sie korrekte Indexüberprüfungen vonc wünschen. Altho würde ich auch lieber eine Liste anstelle eines Arrays an erster Stelle verwenden. – 5tingr4y

+0

Einige Leute haben hier eine gewisse Idee, die Lösung zu kopieren, so dass Katastrophen passieren, wenn der kopierte Code auf ihrer Seite ausgeführt wird. Wir stellen also sicher, dass unsere Lösung nicht für die Katastrophen verantwortlich ist, die nach der Ausführung des Copy-Pasted-Codes passieren :), und Sie haben recht, wenn Sie java.util verwenden.Liste – ShayHaned

0

So in dem Code für einen Standort ist zu fragen, und dann will ich es den Array hinzufügen. Ich verstehe, warum dieser Code jedes Element des Arrays mit der letzten Stelle eingegeben ersetzt, In erster Linie werden Sie sich auf die Verwendung von Arrays zu beschränken, in einem solchen Fall könnten Sie so etwas wie

private int arrayIndexCounter = 0; // make sure this is global variable 

public void addLocation(String location) 
{ 
    locations[arrayIndexCounter] = location; 
    arrayIndexCounter = (arrayIndexCounter + 1) % locations.length; 
} 

Die Aussage versuchen arrayIndexCounter = (arrayIndexCounter + 1)% locations.length stellt sicher, dass Sie niemals die Grenzen Ihres Arrays überschreiten und innerhalb der Grenzen Ihrer Array-Größe bleiben (Von Anfang bis Ende mit locations.length exclusive, wenn arrayIndexCounter == locations .length, setzt sich Ihr arrayIndexCounter selbst auf Null zurück, da n% n == 0). Ich hoffe, das hilft??

0

Ich würde eine List<String> anstelle eines Arrays verwenden, so dass Sie Elemente nach Belieben hinzufügen und entfernen können, und locations.toArray(new String[locations.size()]) immer dann aufrufen, wenn ein Array benötigt wird.

Verwandte Themen