2017-02-21 66 views
-3

尝试反转字符串输入。尝试反转字符串输入

如: 输入 - 这位朋友你好 输出 - dneirf 2009东海生日贺

这是我制作的节目,但它显示出的一系列字符串索引错误:

import java.io.*; 
class Worksheet3sum3 
{ 
    public static void main(String args[])throws IOException 
    { 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     int i; 
     System.out.print("enter string "); 
     String S=br.readLine(); 
     String y=" "; 
     for(i=0;i<=S.length();i++) 
     { 
      char ch=S.charAt(i); 
      y=ch+y; 
     } 
     System.out.print("the reverse is "+y); 
    } 
} 
+1

你为什么不使用StringBuilder的反向方法?如果你想让我发表一个如何去做的例子,请让我知道。 ;) –

+0

学习如何使用调试器是编程的重要部分。 –

+0

我已修复您的缩进。下次请正确缩进代码,以便阅读。 – khelwood

回答

0

之所以它的说法索引越界是因为你要超过字符串的最后一个索引,还记得我们总是从0开始计数,所以在这种情况下,你的意思是说
i < S.length()

for(i=0;i<=S.length();i++) // this is why it's saying index out of bounds because you're going 1 index beyond the last. 
{ 
    char ch=S.charAt(i); 
    y=ch+y; 
} 

下面的解决方案应该能够解决你的“IndexOutOfBounds”的问题:

for(i=0;i< S.length();i++) // notice the "i < S.length() " 
{ 
    char ch=S.charAt(i); 
    y=ch+y; 
} 

另外,我想提供一个简单易用的算法可以用来达到同样的效果。

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("enter string "); 
    String value = scanner.nextLine(); 
    StringBuilder builder = new StringBuilder(value); // mutable string 
    System.out.println("reversed value: " + builder.reverse()); // output result 
    } 

UPDATE

正如你问我为什么你要IndexOutOfBounds的错误,我将在下面提供示范的问题扩大。

让我们假设我们有一个变量String var = "Hello";现在您可以看到变量中有5个字符,但是我们从0开始计数,而不是1,所以“H”是索引0,“e”是索引1,“ l“索引2等等,最后如果你想访问它的索引4的最后一个元素,即使我们在字符串变量中有5个字符。所以提到你的问题,为什么它说外面的指数是因为你要去上一个指数。这里是link进一步的解释和问题的练习。

+0

非常感谢兄弟,是否因为我正在继续程序到字符串的空白空间而再次出现问题?再次感谢您的支持。通过缓冲读取器仍然学习的方式,我们将在下一年尝试扫描程序。 – Pranjal

+0

没问题,没问题。如果它解决了你的问题,如果你将答案标记为接受,我将不胜感激。谢谢。 –

+0

它会超出范围,因为你要比你需要的索引更多。 –

0

使用子,你可以循环通过要向后打印的字符串,并将字符串的字符向后打印出来。

您也可以使用命令.toCharArray(),并向后循环遍历字符数组以向后打印出单词。

+0

非常感谢。我还没有学过阵列。 – Pranjal

+0

没问题。祝你好运! – UnknowableIneffable