我想反转一个字符串 .. 请告诉我为什么它不起作用?

I want to reverse a string .. please tell me why its not working?

import java.util.*;
public class reverse {

    public static void main(String[] args) {
        int i=0;
        Scanner p= new Scanner(System.in);
        String g=p.next();
        int o = g.length();

        while(i<=o)
        {
            int     q=o - i;
             System.out.print(g.charAt(q));
             i++;
        }

    }

}

我得到一个Index out of range exception

索引从 0o-1,您的 i 也是如此。因此,qo 下降到 1。最好是 q = o - i - 1

如果这不是家庭作业,更直接的解决方案是使用 StringBuilder,如下所示:

String reversed = new StringBuilder("your string here").reverse().toString();

如果另一方面,你有/想要循环,你可以用一个简单的 for 循环来完成:

for (int i = o - 1; i >= 0; i--) {
    System.out.print(g.charAt(i));
}

你的循环产生了一个超出范围的异常,因为在你的例子中 q = o - i 当你的 while 循环开始它的第一次迭代时将评估为 g.length() - 0g.length(),基于 1,使得 g.length() - 0 "Out of range".

您没有正确使用索引,请尝试这样的操作:

int length = g.length();
for(int x = length - 1; x >= 0; x --){
    System.out.print(g.charAt(x));
}

我们从索引 length - 1 开始,因为它是字符串中的最后一个字符,然后转到索引 0

i=0更改为i=1

public static void main(String[] args) {
        int i = 1;
        Scanner p = new Scanner(System.in);
        String g = p.next();
        int o = g.length();

        while (i <= o) {
            int q = o - i;
           // System.out.print(g.charAt(q));
            //System.out.print(q); - test line
            i++;
        }
    }

您可以通过输入三个字母的单词(例如:war)取消注释 test line

来进行调试

case i=0 输出将是:

3
2
1
0

这导致 IndexOutOfBoundsException

case i=1 输出将是:

2
1
0

三个字母单词的准确输出是什么