2017-03-14 45 views
-1

我正在爲我的某個類進行賦值。我對java一般很陌生,對於這個問題,我被要求只使用循環和charAt();命令來反轉字符串的中點。不過,當我在中點後嘗試扭轉絃樂時,我遇到了一個問題。它給了我一個例外,我不知道該怎麼做,因爲它看起來對我來說是正確的。任何幫助,將不勝感激。字符串的Java問題:試圖顛倒字符串的中點。字符串超出範圍例外

import java.util.Scanner; 
public class PS4Reverse { 

public static void main (String [] args) { 

String x = ""; 

String t = ""; 

String full = ""; 

String rev = ""; 

String complete = ""; 

Scanner user = new Scanner(System.in); 
System.out.println("Enter a string."); 
x = user.nextLine(); 

int real = x.length(); 

int half = x.length(); 

half = half/2; 

int i = 0; 


for (i = 0; i != half; i++) 
{ 
    char n = x.charAt(i); 
    full = full + n; 

} 


for (i = i; i != real; i++) 
{ 
    char n = x.charAt(i); 
    t = t + n; 
} 

int back = t.length(); 


System.out.println(back); 
for (i = back; i != 0; i--) 
{ 
    char n = t.charAt(i); 
    rev = rev + n; 
} 


complete = full + rev; 

System.out.println("Original String:\t\t" + x) 
System.out.println("Reverse String:\t\t" + complete); 


} 
} 

非常感謝你們所有的提前!

+0

您的最後一個循環開始於數組的長度,這是一個過去的最後一個元素。 –

回答

1

首先,如果您確切地告訴我們發生了什麼異常,它會有所幫助。它是StringIndexOutOfBoundsException,而不是String out of Range exceptionindexoutofrangeexception

無論如何,這是問題:

int back = t.length(); 

for (i = back; i != 0; i--) 
{ 
    char n = t.charAt(i); 

的索引是從零開始baed,所以如果t.length()是4,t.charAt(4)將是出界。你需要從t.length() - 1開始。

+0

您的一個'System.out.println()'語句後面還有一個分號,但我認爲這只是一個錯字。 –

0

你得到這個錯誤:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5 
    at java.lang.String.charAt(Unknown Source) 
    at PS4Reverse.main(PS4Reverse.java:49) 


int back = t.length(); // this code length of t string. But array indis is starting 0. 

這意味着第一項爲0,最後一個項目必須回1。

你用那個;

for (i = back-1; i >= 0; i--) 
{ 
    char n = t.charAt(i); 
    rev = rev + n; 
} 
+0

這對我有效。非常感謝。我非常感謝! –

+0

@GavinWebb [Here](http://stackoverflow.com/help/someone-answers)是當有人回答你的問題時要做什麼。要將答案標記爲已接受,請點擊答案旁邊的複選標記✔將其從灰色變爲填充。您無需在您的問題上添加評論,也不必在答案中添加評論以說「謝謝」。 –