JAVA中的单词回文(StringIndexOutOfBoundsException)

JAVA中的单词回文(StringIndexOutOfBoundsException),java,loops,for-loop,Java,Loops,For Loop,我想知道是不是少了什么。 如果我要输入“赛车”,它必须显示回文,如果我要输入“字符串bean”,它必须不显示回文,但当我运行代码时,它有一个错误 线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:3 位于java.lang.String.charAt(String.java:686) 在praktis.Palindrome.main(Palindrome.java:11) 由于charAt()是0索引的,所以char

我想知道是不是少了什么。 如果我要输入“赛车”,它必须显示回文,如果我要输入“字符串bean”,它必须不显示回文,但当我运行代码时,它有一个错误

线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:3 位于java.lang.String.charAt(String.java:686) 在praktis.Palindrome.main(Palindrome.java:11)


由于charAt()是0索引的,所以charAt(word.length())将在字符串末尾后一个字符。只需从word.length()开始x。希望有帮助

问题的发生是因为您正在索引长度;您应该从零到长度减1建立索引:

for (x = word.length()-1; x >= 0 ; x--)
    ....
此外,调用
charAt(x)
不会更改字符串(事实上,对字符串调用的任何方法都不能更改它:Java中的字符串是不可变的)。如果你反编译一个单词,考虑使用<代码> StringBuilder < /C>,并在你对原单词进行反向迭代时将其附加到字符中。

< P> <代码>(x= Word(长度)(1);x>=0;x-)< /代码>

编辑:


String word=JOptionPane.showInputDialog(“输入字符串:”); 字符串finalword=“”; int x; 对于(x=word.length()-1;x>=0;x--){ finalword=finalword+word.charAt(x); } if(单词等于(finalword)){ showMessageDialog(null,“回文”); }否则{ showMessageDialog(null,“不是回文”); }

您正在使用
word.length()
访问
finalword
中的字符,而
finalword
将由于空格被替换而具有不同的长度。另外,
字符串
的索引从0到
长度-1
,与数组完全相同,因此在
长度()对其进行索引是不允许的。

finalword.charAt(x)
不会做任何事情,因为您忽略了返回的字符。您打算怎么做?至于错误,您应该使用调试器来观察
for
循环中
x
的值。或者,您可以输出
x
的值,并在抛出异常之前查看它们是什么。为什么要重新发明轮子?使用实用程序方法。我已将for(x=word.length();x>=word.length()-1;x--)更改为for(x=word.length()-1;x>=0;x--)删除我的第11行,但当我尝试再次运行代码时,它和每次我输入字符串时,它总是打印回文,即使它不是回文。您需要使用调试器或输出语句来查看代码中发生了什么。我已经更改了我的for(x=word.length();x>=word.length()-1;x--)to for(x=word.length()-1;x>=0;x--)并在那里删除我的第11行,但当我再次尝试运行代码时,它和每次我输入字符串时,它总是打印回文,即使它不是回文。string word=JOptionPane.showInputDialog(“输入字符串:”);字符串finalword=“”;int x;对于(x=word.length()-1;x>=0;x--){finalword=finalword+word.charAt(x);}if(word.equals(finalword)){JOptionPane.showMessageDialog(null,“回文”);}其他{JOptionPane.showMessageDialog(null,“非回文”);}谢谢。我的问题解决了。不需要循环每个字符,只需迭代到中间字符,就可以减少迭代次数,只需检查右边的字符是否等于左边的字符就可以到达中间<代码>公共静态布尔值isPalindrome(String str){boolean result=false;for(int i=str.length()-1;i>=(str.length()-1)/2;i--){if(str.charAt(i)==str str.charAt(str.length()-1-i)){result=true;}否则{result=false;}返回结果;}
for (x = word.length()-1; x >= 0 ; x--)
    ....
String word = JOptionPane.showInputDialog("Enter a String:"); String finalword = ""; int x; for (x = word.length()-1; x >= 0; x--) { finalword = finalword + word.charAt(x); } if (word.equals(finalword)) { JOptionPane.showMessageDialog(null, "Palindrome"); } else { JOptionPane.showMessageDialog(null, "Not a Palindrome"); }