String Index Out Of Bounds Exception!

DATake

Mitglied
Ich mache gerade eine Übungsaufgabe und verzweifle gerade an dieser Exception. Ich kann nicht nachvollziehen warum die Exception geworfen wird? Hat jemand eine Idee.


Java:
public class Zeichenkette implements Aufzaehlung {

	protected String meineZeichenkette;
	protected int pos;

	public Zeichenkette(String meineZeichenkette) {
		this.meineZeichenkette = meineZeichenkette;
	}

	public boolean hatNochElement() {
		return meineZeichenkette.charAt(pos) > 0 ? true : false;
	}

	public Object naechstesElement() {

		return meineZeichenkette.charAt(pos++);
	}
}
________________________________________________________________________________________


Java:
public interface Aufzaehlung {

	public boolean hatNochElement();
	public Object naechstesElement();
		
}

________________________________________________________________________________________


Java:
public class AufzaehlungTest {

	public static void main(String[] args) {

		Aufzaehlung kette = new Zeichenkette("Dies ist eine Zeichenkette");
		while (kette.hatNochElement())

			System.out.print(kette.naechstesElement() + " ");
	}

}
Ausgabe:

Java:
D i e s   i s t   e i n e   Z e i c h e n k e t t e Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 26
	at java.lang.String.charAt(String.java:686)
	at Zeichenkette.hatNochElement(Zeichenkette.java:11)
	at AufzaehlungTest.main(AufzaehlungTest.java:6)
Die Aufgabenstellung: Implementieren Sie die Klasse Zeichenkette

Ein Objekt der Klasse Zeichenkette liefert nacheinander alle Zeichen der Zei- chenfolge meineZeichenkette.
Der Aufruf von hatNochElement() liefert true, wenn es noch Zeichen in der Kette gibt, ansonsten wird false zurückgeliefert.
Der Aufruf von naechstesElement() liefert das nächste Zeichen an den Auf- rufer und rückt mit pos eine Stelle weiter.

Die main Methode darf ich nicht verändern.
 
Zuletzt bearbeitet:

Spin

Top Contributor
Lass dir doch mal
Java:
meineZeichenkette.charAt(100);

ausgeben und du weisst warum die eine Exception bekommst.

Deine Prüfung funktioniert nicht.

Java:
public boolean hatNochElement() {
        return meineZeichenkette.charAt(pos) > 0 ? true : false;
    }

Die mal bitte korrigieren ;)
 

DATake

Mitglied
Danke für die Antwort. Ich habe mehrere Varianten ausprobiert. Ich habe alllerdings keine Möglichkeit gefunden die while Schleife zu beenden. Z.B.


Java:
public boolean hatNochElement() {
		if (meineZeichenkette.lastIndexOf(meineZeichenkette)==-1)
			return false;
		else
			return true;
 
Zuletzt bearbeitet:

DATake

Mitglied
Hat jemand noch eine Idee. Ich hab gefühlte hundert verschiedene Anweisungen probiert. Ich möchte ja keine Lösung hier einfach nur einen kleinen Tip.
 

JCODA

Top Contributor
Java:
 public boolean hatNochElement() {
        return meineZeichenkette.length()>pos;
    }
 

DATake

Mitglied
Danke für deine schnelle Antwort. Die Anweisung habe ich am Anfang versucht nur mit dem < Zeichen:bloed: . Wahnsinn was ich alles versucht habe.
 

JCODA

Top Contributor
Danke für deine schnelle Antwort. Die Anweisung habe ich am Anfang versucht nur mit dem < Zeichen:bloed: . Wahnsinn was ich alles versucht habe.

Programmieren ist nicht Ausprobieren!

Wenn pos<meineZeichenkette.length(), dann gibts noch weitere Stellen,
wenn pos>=meineZeichenkette.length(), dann gibts eben keine mehr.
 

Neue Themen


Oben