Java - 在 for 循环中使用“继续”时出现未处理的异常错误?
Posted
技术标签:
【中文标题】Java - 在 for 循环中使用“继续”时出现未处理的异常错误?【英文标题】:Java - Unhandled exception error when using "continue" in a for loop? 【发布时间】:2013-10-24 15:54:24 【问题描述】:这是一个存储 10 个唯一字符串的程序。如果用户输入一个已经存在于数组中的字符串,用户将得到一个错误。我的代码对于我输入的第一个字符串运行良好,但之后抛出异常,我不知道为什么。如何解决此问题并使其正常工作?
附:我不想使用 Set。我想用数组来做。
编辑:错误名称:线程“主”java.lang.NullPointerException 中的异常 Java 结果:1
谢谢。
public static void main(String[] args)
Scanner keyboard = new Scanner(System.in);
int stringNumber = 0;
String[] stringArray = new String[10];
for (int i = 0; i <= stringArray.length; i++)
boolean itemExists = false;
out.println("\nEnter a string");
String input = keyboard.next();
if (i > 0)
for (int j = 0; j < stringArray.length; j++)
if (stringArray[j].equalsIgnoreCase(input))
itemExists = true;
out.println("Item \"" + input + "\" already exists.");
break;
else
continue; // Unhandled exception error. If I don't have "continue" here, the program doesn't work properly after the first number.
if (itemExists == false)
stringArray[stringNumber] = input;
out.println("\"" + stringArray[stringNumber] + "\"" + " has been stored.");
else
out.println("Try again.");
PrintArray(stringArray);
stringNumber++;
public static void PrintArray(String[] stringArray)
for (int i = 0; i <= 9; i++)
if (stringArray[i] == null)
out.print(" ");
else
out.print("\nYour strings:");
out.print(" " +stringArray[i] + " ");
【问题讨论】:
是异常还是编译器错误?在这两种情况下,请发布堆栈跟踪或完整的错误消息。 原帖中添加的错误信息 您迷路了,因为您的逻辑很复杂,尝试将其拆分为不同的方法。 【参考方案1】:你的问题是这个if (stringArray[j].equalsIgnoreCase(input))
,你指的是空元素,因为你的数组不包含任何内容。
你可以解决这个问题
if (input.equalsIgnoreCase(stringArray[j]))
现在您将值与可能为空的数组项进行比较。
查看示例代码
private final static Scanner keyboard = new Scanner(System.in);
private final static String[] stringArray = new String[10];
public static void main(String[] args)
int stringNumber = 0;
for (int i = 0; i < stringArray.length; i++)
System.out.println("\nEnter a string");
String input = readNextItem();
if(isInputExist(input))
System.out.println("Item \"" + input + "\" already exists.");
System.out.println("Try again.");
else
stringArray[stringNumber++] = input;
System.out.println("\"" + input + "\"" + " has been stored.");
printArray(stringArray);
private static String readNextItem()
return keyboard.next();
private static boolean isInputExist(String input)
for(String stored : stringArray)
if(input.equalsIgnoreCase(stored))
return true;
return false;
【讨论】:
【参考方案2】:您收到 NullPointerException 是因为您正在访问一个空数组。在第二个循环中,您将遍历整个 stringArray 数组,但您已插入第一个 i 元素。
改变这个:
for (int j = 0; j < stringArray.length; j++)
用这个:
for (int j = 0; j < i; j++)
附: 我建议你使用 Set 而不是数组。
这里有一个带有 Set 的版本:
int numStrings = 10;
Set<String> inserted = new HashSet<String>();
while(inserted.size()<=numStrings)
out.println("\nEnter a string");
String input = keyboard.next();
if (inserted.contains(input))
out.println("Item \"" + input + "\" already exists.");
out.println("Try again.");
else
inserted.add(input);
out.println("\"" + input + "\"" + " has been stored.");
out.println(inserted);
【讨论】:
【参考方案3】:问题是这个内部循环:
for (int j = 0; j < stringArray.length; j++)
if (stringArray[j].equalsIgnoreCase(input))
itemExists = true;
out.println("Item \"" + input + "\" already exists.");
break;
else
continue; // Unhandled exception error. If I don't have "continue" here, the program doesn't work properly after the first number.
它不是导致问题的 continue 语句,它是您调用的
stringArray[j].equalsIgnoreCase(input)
在if - stringArray[j] 中还没有填充String,会导致NullPointerException。您可以反转表达式:
input.equalsIgnoreCase(stringArray[j])
(假设“输入”永远不会为 NULL)
【讨论】:
以上是关于Java - 在 for 循环中使用“继续”时出现未处理的异常错误?的主要内容,如果未能解决你的问题,请参考以下文章
在python中使用for循环时出现JSONDecodeError [重复]