Eingelesenes Array darf nur Zahlen zwischen 0 und 99999 enthalten

Neue Frage »

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! smile
 
Auf diesen Beitrag antworten »
Java_Beginner

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.
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 :-)
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:
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.
 
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
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.
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 smile
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 :/
Auf diesen Beitrag antworten »
eulerscheZahl

Du sollst ja auch nur meine Zeile 5 durch diese ersetzen: a= IO.readInts("Array eingeben");.
Nichts mit while.
Auf diesen Beitrag antworten »
saa23

oh okay, na klar so macht das ja auch Sinn, danke! smile

jetzt muss ich nur noch herausfinden, wie ich das Array mit den AlgoTools zurückkopiere verwirrt
Auf diesen Beitrag antworten »
eulerscheZahl

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.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »