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 » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
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.
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
eulerscheZahl

Du sollst ja auch nur meine Zeile 5 durch diese ersetzen: a= IO.readInts("Array eingeben");.
Nichts mit while.
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 :/
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.
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
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.
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 :-)
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.
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