Eingelesenes Array darf nur Zahlen zwischen 0 und 99999 enthalten |
05.12.2015, 12:26 | Auf diesen Beitrag antworten » | |||||
saa23 | Eingelesenes Array darf nur Zahlen zwischen 0 und 99999 enthalten Meine Frage: Hallo zusammen, ich schreibe gerade ein Programm, bei dem ein Array eingelesen werden soll. Die Zahlen dürfen aber nur zwischen 0 und 99999 liegen. Meine Ideen: Einlesen mache ich immer über eine do-while Schleife. Mir ist allerdings nicht klar, wie ich es in der while-schleife unterbringen soll, dass die Zahlen nur in disem Zahlenraum seien sollen. Ich habe überlegt, in die while-Schleife eine for-Schleife zu machen, die die einzelnen Stellen durchgeht und dann an jeder Stelle prüft, ob die einzelnen Zahlen in diesem Zahlenraum liegen. Allerdings funktioniert das bei mir leider nicht. Ist es überhaupt möglich, in eine while-Schleife eine for-Schleife zu schreiben? Im Moment sieht der Teil bei mir so aus: int []a; do{ a= IO.readInts("Array eingeben"); } while( for (int i=0; i<a.length; i++){ a[i]<0 || a[i]>99999 }); Vielen Dank im voraus für die Hilfe! |
|||||
|
||||||
05.12.2015, 12:42 | Auf diesen Beitrag antworten » | |||||
Java_Beginner | Eine Möglichkeit wäre:
Solange eine Zahl zwischen 0 und 99999 eingegeben wird, läuft das Programm, fragt nach der nächsten Zahl und schreibt sie im Array an Stelle i. Sobald eine fehlerhafte Zahl kommt, wird abgebrochen. |
|||||
05.12.2015, 12:44 | Auf diesen Beitrag antworten » | |||||
Java_Beginner | Bei der Array-Initialisierung sehe ich gerade hat sich eine 9 zu viel eingeschlichen. Das soll int [] arg = new int [99999] heißen :-) |
|||||
05.12.2015, 13:37 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Beim Code von Java_Beginner ist es mir trotzdem möglich, eine Zahl einzugeben, die nicht im zulässigen Bereich liegt. Erst danach wird abgebrochen. Auch wird über die Größe des Arrays in der Angabe keine Aussage getroffen. Die Funktion IO.readInts kenne ich nicht, denke aber ich habe die Doku gefunden. Wenn du also schon falsche Werte im Aray hast und diese nachträglich löschen willst, geht das so:
Man kann die Aufgabe auch lösen, ohne ein neues Array zu erzeugen. Ich dachte mir, es wäre so leichter verständlich. |
|||||
Anzeige | ||||||
|
||||||
05.12.2015, 14:24 | Auf diesen Beitrag antworten » | |||||
saa23 | @java_Beginner: gehst du bei deiner Schreibweise davon aus, dass jede Zahl des Arrays einzeln eingelesen wird? Die sollen nämlich eigentlich nicht einzeln eingelesen werden sondern alle zusammen nur durch Leerzeichen getrennt für mich ist es leider schwer, eure Antworten zu verstehen, weil wir mit den AlgoTools arbeiten und das irgendwie anders aufgebaut ist |
|||||
05.12.2015, 14:31 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Ja, Java_Beginner liest jede Zahl einzeln ein. Ich habe eine Beispieleingabe hart eincodiert. Kannst du aber leicht wieder durch deine Eingabe ersetzen. Dann erstelle ich ein neues Array (nicht nötig, das Kopieren kannst du auch direkt von a nach a machen). Jetzt habe ich 2 Indizes: einen zum Lesen (a_index) und einen zum Schreiben (b_index). Die Leseposition bewege ich einmal über das komplette Array. Die Schreibposition muss ich nur ändern, wenn ich auch etwas geschrieben habe. Also dann, wenn der Wertebereich passt. Am Ende wird noch von b nach a zurück kopiert, wobei die Größe des Arrays verringert wird (es wurden ja Einträge gelöscht). Wenn du mal fremden Code lesen musst, hilft dir AlgoTools nichts. Das verwendet nämlich keiner. |
|||||
05.12.2015, 18:43 | Auf diesen Beitrag antworten » | |||||
saa23 | Das mir AlgoTools leider total wenig hilft, habe ich auch schon gemerkt, leider müssen wir das an der Uni benutzen :/ ich glaube, jetzt habe ich größtenteils verstanden, was du machst Mir wird allerdings die ganze Zeit eine Fehlermeldung angezeigt, wenn ich versuche, die for-Schleife in meine do-while-Schleife zu packen, um das Einlesen zu ermöglichen :/ |
|||||
05.12.2015, 18:46 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Du sollst ja auch nur meine Zeile 5 durch diese ersetzen: a= IO.readInts("Array eingeben");. Nichts mit while. |
|||||
06.12.2015, 01:00 | Auf diesen Beitrag antworten » | |||||
saa23 | oh okay, na klar so macht das ja auch Sinn, danke! jetzt muss ich nur noch herausfinden, wie ich das Array mit den AlgoTools zurückkopiere |
|||||
06.12.2015, 07:33 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Habe mir das AlgoTools mal runtergeladen. Könnte man mal überarbeiten, wenn ich mir den Code so ansehe.
Seit 2002 geht das auch mit der Bibliotheksfunktion String.split(). Zu Arrays habe ich das nichts gefunden. Kannst du dir aber auch selbst schreiben: du kennst die benötigte Größe des neuen Arrays (steht in der Variable b_index). Damit kannst du ein neues Array anlegen und die Einträge einen nach dem anderen kopieren. |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |
|