【问题标题】:Java Issue with String: Trying to reverse the midpoint of String.. String out of Range exception字符串的 Java 问题:尝试反转字符串的中点。字符串超出范围异常
【发布时间】:2017-03-14 05:16:30
【问题描述】:

我正在为我的一门课程做作业。一般来说,我对 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);


}
}

提前感谢大家!

【问题讨论】:

  • 您的最后一个循环从数组的长度开始,该长度是其最后一个元素之后的长度。

标签: java string loops indexoutofrangeexception charat


【解决方案1】:

首先,如果您在告诉我们发生了什么异常时准确无误,这会有所帮助。它是StringIndexOutOfBoundsException,而不是String out of Range exceptionindexoutofrangeexception

不管怎样,这就是问题所在:

int back = t.length();

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

索引是从零开始的,所以如果 t.length() 是 4,t.charAt(4) 就会越界。你需要从t.length() - 1开始。

【讨论】:

  • 您的一个 System.out.println() 语句后还缺少一个分号,但我认为这只是一个错字。
【解决方案2】:

您收到此错误:

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

【讨论】:

  • 这对我有用.. 非常感谢。非常感谢!
  • @GavinWebb Here 是当有人回答您的问题时该怎么做。要将答案标记为已接受,请单击答案旁边的复选标记 ✔ 将其从灰色切换为已填充。无需对您的问题或答案添加评论以说“谢谢”。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2018-01-13
  • 2021-08-12
  • 1970-01-01
  • 2014-08-27
  • 2014-07-23
相关资源
最近更新 更多