Eingelesenes Array darf nur Zahlen zwischen 0 und 99999 enthalten |
saa23 unregistriert
|
|
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:26 |
|
|
Java_Beginner unregistriert
|
|
Eine Möglichkeit wäre:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
|
public static void main(String[] args)
{
int [] arr = new int [999999];
int i=0;
int eingabe=0;
do
{
System.out.println("Zahl eingeben: ");
Scanner read= new Scanner (System.in);
eingabe = read.nextInt();
arr[i]=eingabe;
++i;
}
while (eingabe>=0 && eingabe <=99999);
}
|
|
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:42 |
|
|
Java_Beginner unregistriert
|
|
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 12:44 |
|
|
|
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:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
|
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] a = { 312, 3543545, 3456, -46, 456, 44354354, -453 };
int[] b = new int[a.length];
int b_index = 0;
for (int a_index = 0; a_index < a.length; a_index++) {
if (a[a_index] >= 0 && a[a_index] <= 99999) {
b[b_index] = a[a_index];
b_index++;
}
}
a = Arrays.copyOf(b, b_index);
System.out.println(Arrays.toString(a));
}
} |
|
Man kann die Aufgabe auch lösen, ohne ein neues Array zu erzeugen. Ich dachte mir, es wäre so leichter verständlich.
__________________ Syntax Highlighting fürs Board (Link)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 05.12.2015 13:39.
|
|
05.12.2015 13:37 |
|
|
saa23 unregistriert
|
|
@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:24 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
05.12.2015 14:31 |
|
|
saa23 unregistriert
|
|
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:43 |
|
|
saa23 unregistriert
|
|
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 01:00 |
|
|
|
Habe mir das AlgoTools mal runtergeladen.
Könnte man mal überarbeiten, wenn ich mir den Code so ansehe.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
|
public static String[] readWords(String prompt) {
String input = readLine(prompt).trim().replace('\t', ' ');
int numberOfWords;
int wordNumber;
String word;
boolean ws;
char ch;
numberOfWords = 0;
ws = true;
for (int i=0; i<input.length(); i++) {
ch = input.charAt(i);
if (ws && ch != ' ') {
numberOfWords++;
ws = false;
} else if (!ws && ch == ' ') {
ws = true;
}
}
String[] words = new String[numberOfWords];
wordNumber = 0;
word = "";
ws = true;
for (int i=0; i<input.length(); i++) {
ch = input.charAt(i);
if (ws && ch != ' ') {
word += ch;
ws = false;
} else if (!ws && ch != ' ') {
word += ch;
} else if (!ws && ch == ' ') {
words[wordNumber++] = word;
word = "";
ws = true;
}
}
if (!ws) {
words[wordNumber] = word;
}
return(words);
} |
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
06.12.2015 07:33 |
|
|
|