【问题标题】:I want to reverse a string .. please tell me why its not working?我想反转一个字符串..请告诉我为什么它不起作用?
【发布时间】:2018-06-22 17:38:51
【问题描述】:
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

【问题讨论】:

  • 字符索引从0length() -1

标签: java string reverse


【解决方案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));
}

您的循环会生成超出范围的异常,因为当您的while 循环开始第一次迭代时,您的q = o - i 将评估为g.length() - 0g.length(),从 1 开始,使 g.length() - 0“超出范围”。

【讨论】:

  • 是的,谢谢指出,忘记加toString()
【解决方案2】:

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

三个字母单词需要的确切输出是什么

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-09-14
        • 1970-01-01
        • 2023-03-24
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-16
        • 2021-08-31
        相关资源
        最近更新 更多