Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Eingelesenes Array darf nur Zahlen zwischen 0 und 99999 enthalten » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Eingelesenes Array darf nur Zahlen zwischen 0 und 99999 enthalten
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
saa23
unregistriert
Eingelesenes Array darf nur Zahlen zwischen 0 und 99999 enthalten Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
05.12.2015 12:26
Java_Beginner
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
saa23
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

@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
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
saa23
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 :/
05.12.2015 18:43
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)
05.12.2015 18:46 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
saa23
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
06.12.2015 01:00
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Eingelesenes Array darf nur Zahlen zwischen 0 und 99999 enthalten