0

我的程序完全按照我希望的方式运行,但是当我将问题留空或单击确定时,我的输出中所有这些错误都显示为红色。我想知道如何解决这个问题,所以当我什么都不输入时,我应该得到 null 或空字符串。我相信我已经搞砸了以下程序,但我需要这些数据才能使我的程序正常工作。我是否缺少一些东西来确保我可以获得 null 或空字符串。

谢谢!

input = JOptionPane.showInputDialog(null, "Ask any question (Remember to type the ?):");
i = input.length() - 1;
lastletter = input.charAt(i);
4

4 回答 4

4

当没有输入任何内容时,input.length()返回0。然后您获取0-1并获取i包含-1. 然后你试图-1在空输入中获取索引上的字符。在检索最后一个字母之前,您必须检查是否input.length()等于。0

于 2012-10-13T21:54:08.887 回答
2

当你什么都不输入时,input变成"". 结果,input.length() - 1计算结果为-1,表示您正在调用input.charAt(-1)。这会导致 aStringIndexOutOfBoundsException被抛出,产生你的“红色错误”。

于 2012-10-13T21:54:44.990 回答
1

字符串chatAt(index)返回指定索引处的任何字符,其中索引的范围可以是 0 到字符串的长度减去 1 即。string.lenght()-1并且必须是积极的。超出此范围的任何索引都会给您 `IndexOutOfBoundsException 。

所以在你的特殊情况下,

i = input.length() - 1;
lastletter = input.charAt(i);

当您什么都不输入时, input.length() 返回 0 ,因此 i 变为 -1。由于 java 规范说 charAt() 的有效范围是从 0 到 input.length()-1 其中 input.length()-1 必须是正数,因此您的代码会抛出 IndexOutOfBoundsException

您可以通过检查索引“i”是否为负数来避免它:

i = input.length() - 1;
if (!i<0){
   lastletter = input.charAt(i);
}

有关详细信息,请参阅http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#charAt(int)

于 2012-10-13T22:01:55.847 回答
1

线

JOptionPane.showInputDialog(null, "Ask any question (Remember to type the ?):");

如果用户在没有输入任何文本的情况下单击确定,将返回一个空字符串 ("")。此字符串的长度为零,尝试访问索引 -1 处的字符将引发 indexOutOfBoundsException。这可以通过检查输入的长度轻松解决。但在你这样做之前,你需要检查输入是否等于 null,因为如果用户按下取消或右上角的“x”,这将返回。所以你需要的检查是:

if (input != null && input.length()  > 0){
   lastletter = input.charAt(input.length - 1);
}
于 2012-10-13T22:03:33.227 回答