Hilfe bei Java-Aufgabe, Programmierung

ivYZ

Neues Mitglied
Hey Leute,
Ich habe ein Problem beim Programmieren eines Javapogrammes. Ich bin nicht nur neu hier, sondern auch noch Anfänger im Programmieren und wäre sehr dankbar für eure Hilfe.
Alos mein Prof. hat uns folgende Aufgabe gestellt: Es soll eine Klasse Texttrenner realisiert werden, die eine Zeichenkette anhand bestimmter Trennzeichen in Textteile trennen kann. Als Beispiel wäre da der Druckdialog eines Pogrammes zu nennen. Hier kann es ein Textfeld geben, in dem
durch Komma getrennt die Nummern der zu druckenden Seiten eingegeben werden. Dieser Text muss dann an den Kommas getrennt werden, um die einzelnen Seitenzahlen zu erhalten.
Dazu sollen 2 Methoden realisiert werden:
1. Eine Instanzmethode boolean hatNochWoerter().
Die Methode liefert genau dann true,
wenn der Texttrenner nach den bisher gelieferten Wörtern noch mindestens ein weiteres Wort enthält.
2. Eine Instanzmethode String gibNaechstesWort().
Die Methode liefert das nächste Wort aus der zugrunde liegenden Zeichenkette. Falls die Zeichenkette kein Wort mehr enthält, liefert die Methode null.

In meinem geschriebenen Programm tritt nun aber immer folgender Fehler auf wenn ich die Methoden testen will:"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
at java.lang.String.charAt(String.java:658)
at Texttrenner.prueftEinzelneTrennzeichen(Texttrenner .java:86)
at Texttrenner.verschiebeMerker(Texttrenner.java:72)
at Texttrenner.hatNochWoerter(Texttrenner.java:41)
at TexttrennerTest.main(TexttrennerTest.java:13)
Java Result: 1"

Ich habe mittlerwiele schon einiges ausprobiert, komme aber auf kein Ergebnis. Würde mich desshalb sehr über Hilfe freuen.
Hier mein Programmcode:

Java:
/** Diese Klasse trennt einen Text anhand bestimmter Trennzeichen
 * in Textteile auf und gibt die einzelnen Wörter aus.
 *
 * @author Y
 */
public class Texttrenner {
    
/** Merkt sich die Stelle in der zeichenkette.
 * 
 */
static int merker = 0;
 
 /** Kette, die aus einzelnen Zeichen besteht, Text.
  * 
 */
private String zeichenkette;

/** Bestimmte Zeichen, die einzelne Wörter voneinander trennen.
 * 
 */
private String trennzeichen;

/** Erzeugt einen Textrenner bestehend aus einer Zeichenkette und Trennzeichen.
 * 
 * @param zeichenkette Kette, die aus einzelnen Zeichen besteht
 * @param trennzeichen Zeichen, die einzelne Wörter voneinander trennen
 */    
public Texttrenner(String zeichenkette, String trennzeichen) {
    
    this.zeichenkette = zeichenkette;
    this.trennzeichen = trennzeichen;
}   
 
/**Prüft ob der Texttrenner nach den bisher gelieferten Wörtern 
 * noch mindestens ein weiteres Wort enthält.
 * @return true wenn noch wörter zu verfügung stehen
 */
public boolean hatNochWoerter(){
    verschiebeMerker(); 
    return (merker >= zeichenkette.length())
            ? false
            : true;
     
 }
 
/** Liefert das nächste Wort der vorgegebenen Zeichenkette, die durch 
 * trennzeichen voneinander getrennt sind. Gibt es keine 
 * wörter mehr, wird 0 ausgegeben.
 *
 * @return nächstes Wort in der Zeichenkette
 */
 public String gibNaechstesWort() {
     verschiebeMerker(); 
  int wortanfang = merker;
  String ergebnis;
  if (merker >= zeichenkette.length()){
 ergebnis = "0"; 
}
else {
  while (prueftEinzelneTrennzeichen() == false) {
      merker++;  
}  ergebnis = zeichenkette.substring(wortanfang, merker);
 } return ergebnis;
}
 /** Verschiebt den Merker um so viele stellen auf der Zeichenkette nach rechts
  * bis er den Anfang des nächsten Wortes erreicht hat.
  * 
  */
 public void verschiebeMerker(){
     while ( prueftEinzelneTrennzeichen()== true && 
           (merker != zeichenkette.length())) {
          merker++;  
          
  }
 }
 /** prüft ob die einzenene Trennzeichen der Kette mit dem vom Merker
  * markierten Zeichen übereinstimmen.
  * @return true wenn ein Trennzeichen gefunden wurde
  */
public boolean prueftEinzelneTrennzeichen(){
   int laenge = 0;
 while ((laenge <= trennzeichen.length()- 1) && ((zeichenkette.charAt(merker))== (trennzeichen.charAt(laenge)))== false) {
    laenge = laenge + 1;   
 }  return (zeichenkette.charAt(merker))== (trennzeichen.charAt(laenge));
}

   
}
 

eMmiE

Bekanntes Mitglied
Was hast du denn eingegeben?

Ich schätze das Problem liegt hier:
Z.86:
Code:
laenge <= String.length()-1

Ersetze das mal durch
Code:
laenge < String.length() - 1
 

ivYZ

Neues Mitglied
Oh gott, vielen Dank, jetzt habe ich es verstanden und es funktinioniert :)
Ich habe jedes mal die Schleifen einmal zu viel durchlaufen, weil ich die Bedingung nicht genau genug festgelegt habe :bloed:
 

Neue Themen


Oben