Java - 当我在输入中不输入任何内容时,我收到红色错误



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

谢谢!

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

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

当您不输入任何内容时,input将变为""。结果,input.length() - 1的计算结果为 -1 ,这意味着您正在调用input.charAt(-1)。这会导致抛出StringIndexOutOfBoundsException,产生您的"红色错误"。

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);
}

字符串的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)。

最新更新