字符串的Java问题:尝试反转字符串的中点。。字符串超出范围异常

字符串的Java问题:尝试反转字符串的中点。。字符串超出范围异常,java,string,loops,indexoutofrangeexception,charat,Java,String,Loops,Indexoutofrangeexception,Charat,我正在为我的一个班做作业。一般来说,我对java非常陌生,对于这个问题,我被要求只使用循环和charAt();命令反转字符串的中点。然而,当我试图在中点后反转字符串时,遇到了一个问题。它给了我一个例外,我不知道如何理解它,因为它在我看来是正确的。任何帮助都将不胜感激 import java.util.Scanner; public class PS4Reverse { public static void main (String [] args) { String x = ""; Str

我正在为我的一个班做作业。一般来说,我对java非常陌生,对于这个问题,我被要求只使用循环和charAt();命令反转字符串的中点。然而,当我试图在中点后反转字符串时,遇到了一个问题。它给了我一个例外,我不知道如何理解它,因为它在我看来是正确的。任何帮助都将不胜感激

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);


}
}

提前非常感谢大家

首先,如果您能准确地告诉我们发生了什么异常,这会有所帮助。它是一个
StringIndexOutOfBoundsException
,而不是
字符串超出范围异常
indexoutofrangeexception

无论如何,这就是问题所在:

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
开始。您遇到以下错误:

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,最后一项必须为back-1

你用它

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

您的最后一个循环从数组的长度开始,该长度超过其最后一个元素。您的
System.out.println()
语句之一后也缺少一个分号,但我认为这只是一个输入错误。这对我很有效。。非常感谢你。我非常感激@GavinWebb是当有人回答你的问题时该怎么做。要将答案标记为已接受,请单击复选标记✔ 在答案旁边,将其从灰显切换为填充。没有必要对您的问题或答案添加评论来表示“谢谢”。