Java - 当我在输入中没有输入任何内容时,我得到红色错误

时间:2012-10-13 21:49:16

标签: java tags

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

谢谢!

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

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

当您输入任何内容时,input变为""。因此,input.length() - 1评估为-1,这意味着您正在调用input.charAt(-1)。这会导致StringIndexOutOfBoundsException被抛出,产生“红色错误”。

答案 2 :(得分:1)

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

所以在你的特定情况下,

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

当你什么都没输入时,input.length()返回0,因此我变成-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)

答案 3 :(得分: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);
}