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

时间:2018-06-22 17:38:51

标签: java string reverse

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

4 个答案:

答案 0 :(得分:3)

如果这不是家庭作业,那么更直接的解决方案是像这样使用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在您的g.length() - 0循环开始其第一次迭代时将评估为whileg.length()基于1,使g.length() - 0超出范围。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您没有正确使用索引,请尝试以下操作:

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

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

答案 3 :(得分: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

案例i=0的输出为:

3
2
1
0

哪个指向IndexOutOfBoundsException

案例i=1的输出为:

2
1
0

这是三个字母单词所需的确切输出