Wert in einem Array "überspringen"

spec

Neues Mitglied
Hallo zusammen!

Ich soll als "kleines Projekt" einen Vokabeltrainer bauen.
Eine Bedingung lautet, dass eine Vokabel, die bereits 3x in der laufenden Session gelöst wurde, nicht noch einmal abgefragt werden soll.

Kurz als grobe Übersicht:

Ich habe ein Array gebaut in dem jedes Feld ein Vokabelpaar (deutsch-englisch bzw. umgekehrt) darstellt. Dem konstruktor wird die deutsche sowie die englische Vokabel übergeben. Dazu noch einen Zähler für die Fehler (wenn sie falsch übersetzt wurde) und einen Zähler für die Box (nach dem klassischen Karteikartensystem) der hochgezählt wird, sofern eine Vokabel richtig beantwortet wurde.

Hier mal ein kurzer Snippet, wie die Vokabeln abgefragt werden:
Java:
for (int zeiger = 0; zeiger <indizes.length; zeiger++){
System.out.println(vokabeln[indizes[zeiger]].getdeutsch());
				System.out.print("Ihre eingabe: ");
				String eingabe = ein.next();
				if(vokabeln[indizes[zeiger]].checkEnglisch(eingabe)){
					System.out.println("Richtig!");
					vokabeln[indizes[zeiger]].boxUp();
				}
				else{
					System.out.println("Ihre Antwort war leider falsch.\nDie richtige antwort lautet: "+vokabeln[indizes[zeiger]].getenglisch());
					vokabeln[indizes[zeiger]].fehlerUp();
					
				}
			}
Zur Erklärung:
vokabeln[] ist das Array mit allen dem Programm verfügbaren Vokabeln (50 stk, eingelesen via Dateizugriff)
indizes[] ist ein integer-Array, welches mit Zufallswerten gefüllt wird, damit Variation ins Spiel kommt. Gleichzeitig wird bei der Erzeugung dieses Arrays darauf geachtet, dass eine Vokabel nicht 2x aus dem Pool gezogen werden kann.
Zeiger ist einfach nur ein ... ja... Zeiger auf die entsprechende Vokabel ;D

In welcher Box sich die Vokabel zur Zeit befindet wird folgendermaßen abgefragt:
Java:
	public boolean skip(){
		if (this.box==2){
			return true;
		}
		else{
			return false;
		}
	}

Beispiel: Unsere Session besteht aus 3 Vokabeln. Die erste Vokabel haben wir 2x richtig (Box2) die zweite 3x richtig(Box 3) und die dritte einmal richtig (Box 1).

Beim nächsten durchlauf soll die zweite Vokabel nun nicht mehr abgefragt werden, da sie quasi "gelernt" ist. Man könnte denken "easy!"
Java:
zeiger++
. Das wird aber zum Problem, wenn die letzte Vokabel des Arrays 3x gelöst wird (outofbound). Nun die Idee: "Ok!"
Java:
if(zeiger==indizes.length){
zeiger--
}
Was aber, wenn die Vokabel davor EBENSO schon 3x gelöst wurde(selbes gilt fuer zeiger++)?

Ich hoffe man versteht meine Problematik :D
Ich würde gerne etwas bauen, was mir eine Zufallszahl aus den VERBLEIBENDEN Indizes zieht und die entsprechende Vokabel ausgibt.

Ich hoffe ihr könnt mir einen kleinen Schubs in die richtige Richtung geben :)
 
Zuletzt bearbeitet von einem Moderator:

spec

Neues Mitglied
Hallo Jerome,
Objektorientierung ist doch mit drin:
vokabeln[] ist ein Array von Objekten des Typs Vokabelpaar (eigene Klasse gebaut). Wie oben beschrieben enthält ein Vokabelpaar die Werte für deutsch, englisch, box und fehler.
 

arilou

Bekanntes Mitglied
Das ist ein typisches Problem:

Eine Schleife über eine Menge, deren Inhalt/Länge sich während der Schleifen-Ausführung ändert.

Möglichkeit 1: Über die Menge iterieren mit einem Konstrukt, dass eine Änderung bemerkt und sich selbst anpasst: Siehe hierzu java.util.Iterator
Möglichkeit 2: Aus der for- eine while-Schleife machen, und den Index (zaehler) nur dann hochzählen, wenn das aktuelle Objekt "erhalten bleibt", und nicht, wenn es entnommen wird (und das nachfolgende an dessen Stelle (vor-)rückt).
 

Neue Themen


Oben