【发布时间】:2012-10-07 08:45:08
【问题描述】:
我正在尝试创建一个程序,该程序将使用名为“防弹”的包(完成,工作正常)从用户那里获取输入,但是当我找到匹配项时出现无限循环错误。我有点不知所措,我觉得我不太理解我的代码为什么不起作用。我不是在寻找直接的答案,因为我正在努力学习这一点,但任何帮助都将不胜感激。谢谢,我的代码如下。
--编辑-- 我得到了程序的工作。谢谢大家的帮助,你们太棒了。
import bulletproof.*;
public class A26_1 {
public static void main(String[] args) {
BPScanner kb = new BPScanner();
String reservedWordToCheck = kb.getStringFromUser("Enter a word to see if it's reserved or enter leave: ");
System.out.println(ReservedWordChecker(reservedWordToCheck));
}
public static String ReservedWordChecker(String reservedWordToCheck) {
String[] table = {
"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
"continue", "default", "do", "double", "enum", "extends", "final", "finally", "float",
"for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native",
"new", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super",
"switch", "synchronized", "this", "throw", "throws", "transient", "try", "void", "volatile", "while"
};
while (true) {
if (reservedWordToCheck.equalsIgnoreCase("leave"))
break;
boolean found = false;
for (int i=0; i < table.length; i++) {
if (reservedWordToCheck.equalsIgnoreCase(table[i])) {
found = true;
break;
}
if (found)
System.out.println("Yeah, " + reservedWordToCheck + ", is reserved as a Java identifier.");
else
System.out.println("Nope, the word " + reservedWordToCheck + ", isn't reserved. Go hog wild.");
}
System.out.println("OK BYE");
} return reservedWordToCheck;
}
}
【问题讨论】:
-
一般输入法?就像我在该列表中输入一个单词,它应该匹配并说“是的”,然后单词“,是保留字。”。程序检查方法内部提供的列表。我希望能澄清一些事情。
-
您好,一个好的做法是使用如下所示的字符串相等函数:if ("leave".equalsIgnoreCase(reservedWordToCheck))。这样做可以防止发生 NullPointerException。如果 reservedWordToCheck 为空,则条件为假,正如我们所料,但避免了 RuntimeException。
-
你还应该考虑修改你的代码只有一个循环,你不需要外部的while。 if (table[i].equalsIgnoreCase(reservedWordToCheck)) { return reservedWordToCheck;} 之前的 if 和最后你可以简化你的代码。还要记住在您的方法之外将 String [] 表声明为常量,每次使用 ReservedWordChecker 时都创建一个新实例是不可取的。我还认为该方法应该被称为 existsReservedWord 并且可以返回一个布尔值,而不是您正在搜索的单词。