字符串数组元素检查的while循环输入正确值后仍循环,代码问题排查
先来看你给出的代码片段:
String [] vKeywordsArray; int vNumberofKeywords = Integer.parseInt(JOptionPane.showInputDialog("请输入您想要录入的关键词数量?")); vKeywordsArray = new String[vNumberofKeywords]; int i=0; while (i < vNumberofKeywords) { vKeywordsArray[i] = JOptionPane.showInputDialog("请录入要存储在索引" +i+ "处的关键词。"); i++; } JOptionPane.showMessageDialog(null, "感谢您的输入。"); for (int j=0; j < vKeywordsArray.length; j++) { String vKeywords = JOptionPane.sh...
从这段代码的核心逻辑来看,while循环本身的写法是没问题的:i从0开始,每录入一个关键词就自增1,当i等于vNumberofKeywords时,循环条件i < vNumberofKeywords不成立,循环就会终止。出现「输入正确值后仍持续循环」的情况,大概率是以下几个隐藏问题导致的:
问题1:
vNumberofKeywords的值不符合预期
比如你输入关键词数量时不小心敲了一个很大的数字(比如100),导致需要重复录入很多次,误以为循环“卡住”;如果输入的是负数,创建数组时会直接抛出NegativeArraySizeException,程序会直接崩溃,根本不会进入循环。问题2:
i的递增逻辑被异常干扰
要是你的完整代码里给录入关键词的代码加了异常捕获,却没处理i的递增逻辑,就会导致循环一直停留在同一个索引位。比如这种错误写法:while (i < vNumberofKeywords) { try { vKeywordsArray[i] = JOptionPane.showInputDialog("请录入关键词..."); i++; // 把递增放在try块里,异常时就不会执行 } catch (Exception e) { // 只捕获异常没处理i的递增 } }问题3:变量作用域冲突
如果你在循环内部重新声明了同名的i变量,就会覆盖外部的i,导致外部的i永远不会递增,循环也就永远停不下来。比如:int i=0; while (i < vNumberofKeywords) { int i = 0; // 这里重新声明了局部变量i,和外部的i没关系 vKeywordsArray[i] = JOptionPane.showInputDialog(...); i++; }问题4:误把后续代码的异常当成while循环问题
你给出的代码最后有个没写完的for循环,如果这个循环里有逻辑错误(比如死循环),会让你误以为是前面的while循环在持续运行。
建议你先加一行打印代码确认vNumberofKeywords的实际值(比如System.out.println("要录入的关键词数量:" + vNumberofKeywords);),再检查i的递增逻辑是否在所有场景下都会执行,以及有没有变量作用域的冲突。
内容的提问来源于stack exchange,提问作者Phong Truong

