2016-03-25 6 views
0

Meine Aufgabe besteht darin, eine Zeichenfolge umzukehren und die umgekehrte Zeichenfolge zu drucken.String Index OutOfBoundsException?

Hier ist mein Code

import java.util.*; 
import java.io.*; 
public class reverse1 
{ 
    public static void reverse(String x) throws IllegalCharacterException 
    { 
    char j; 
    int max; 
    String reversedString = " "; 
    for(int i = 0; i < x.length() - 1; i++) 
    { 
     max = x.length(); 
     j = x.charAt(i); 
     j = reversedString.charAt(max); 
     i--; 
    }//end for loop 

    }//end method 

public static void main(String[] args) throws IllegalCharacterException 
{ 
    Scanner keyboard = new Scanner(System.in); 
    String s; 
    System.out.println("Please enter a string"); 
    s = keyboard.next(); 
    reverse(s); 
}//end main 

}//end class 

Ich erhalte diese Fehlermeldung:

java.lang.StringIndexOutOfBoundsException: String index out of range: 6 
at java.lang.String.charAt(Unknown Source) 
at reverse1.reverse(reverse1.java:14) 
at reverse1.main(reverse1.java:26) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 

ich die Zeilennummern erwähnt geprüft hatte, aber immer noch nicht verstehen, das Problem. Ich habe die x.length() zu x.length() - 1 geändert, weil ein Freund mir gesagt hat, dass ich das machen soll, aber ich bekomme immer den gleichen Fehler.

+0

'reversedString.charAt (max);' ... Was haben Sie erwartet, dass das zurückkommt? –

+2

Mögliches Duplikat von [Eine Zeichenkette in Java umkehren] (http://stackoverflow.com/questions/7569335/reverse-a-string-in-java) –

+0

@ cricket_007: Warum duplizieren von "Eine Zeichenkette in Java umkehren"? Die Frage ist nicht, wie man eine Zeichenkette umkehrt. Es handelt sich um eine besondere Ausnahme. – yaccob

Antwort

0

Die Linie j = reversedString.charAt(max); gibt Ihnen reversedString conatins leere Zeichenfolge von error.Since Länge Null. Aber Sie greifen auf max Index von diesem zu.

Hinweis: Die Logik, die Sie zum Umkehren String geschrieben haben, ist nicht correct.Below Code auf diesen

helfen kann
for(int i = x.length() - 1; i >=0 ; i--) 
{ 
    char c = x.charAt(i); 
    reversedString = reversedString+c; 
} 
+0

Dank Mann, es hat funktioniert – Marc

+0

@Marc Wenn diese Antwort hilft es, beachten Sie bitte die Annahme .. (y) – Prabhaker

-1

reversedString hat eine Anfangslänge von 1, also sein anfänglichen maximalen gültiger Index 0. Für jede Saite wird x mehr als 0 (alle nicht-leere Zeichenkette) max = x.length() StringIndexOutOfBoundsException ein in der ersten Iteration verursacht.

+0

Dank für die Hilfe – Marc

1

Ihr Problem liegt hier:

String reversedString = " "; 

Nach ein paar Zeilen schreiben Sie:

j = reversedString.charAt(max); // while the reversedString.length() == 1 

Das ist, warum Sie Ihre Fehler. Sie haben verwirrt x.length(), die Sie zu max (6 apperently) inputed haben und reversedString, die immer „“ gleich und hat nie eine Länge von mehr als 1

+0

Dank für die Hilfe – Marc

1

Es sieht aus wie, dass Sie ein Programm schreiben, eine Zeichenfolge zu umkehren. Aber auf den ersten Blick denke ich, Sie sind weit von der Lösung entfernt.

Aber keine Sorge! Der Grund, warum die Ausnahme ausgelöst wird, ist, dass Sie das Zeichen im Index max in der Zeichenfolge "" abrufen. Die Zeichenfolge "" hat nur ein Zeichen - ein Leerzeichen. Das heißt, es hat nur einen Index, 0. Wenn Sie versuchen, auf das Zeichen bei Index 6 oder 7 oder 8 oder einen anderen Wert als 0 zuzugreifen, erhalten Sie eine Ausnahme!

Warum nicht die umgekehrte Methode aus der Klasse StringBuilder verwenden? Es ist wahnsinnig einfach zu bedienen! Setzen Sie diesen Code in Ihrer reverse Methode:

StringBuilder builder = new StringBuilder(x); 
builder.reverse(); 
x = builder.toString(); 
System.out.println(x); 

die in dieser Zeile für Zeile sehen lassen.

StringBuilder builder = new StringBuilder(x); 

Dies erzeugt ein neues StringBuilder mit einer ersten Reihe von x, das Argument in die Methode übergeben.

builder.reverse(); 

Diese Zeile kehrt die Zeichenfolge im StringBuilder, aka x.

x = builder.toString(); 

Dies weist die umgekehrte Zeichenfolge x zu.

System.out.println(x); 

Sie wissen, druckt nur die umgekehrte Zeichenfolge.

+0

Dank für die Hilfe – Marc

+0

Wenn Sie denken, meine Antwort hilft Sie, bitte, akzeptieren Sie es, indem Sie das Häkchen anklicken. @Marc – Sweeper

Verwandte Themen