我的程序完全按照我希望的方式工作,但是当我将问题留空或单击“确定”时,我的输出会将所有这些错误都显示为红色。我想知道如何解决这个问题,所以当我输入任何内容时,我应该得到null或空字符串。我相信以下程序我搞砸了,但是我需要这些数据来使我的程序正常工作。是否有一些我缺少的东西,以确保我可以得到null或空字符串。
谢谢!
input = JOptionPane.showInputDialog(null, "Ask any question (Remember to type the ?):");
i = input.length() - 1;
lastletter = input.charAt(i);
答案 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);
}