使用Scanner类实现功能时遇NoSuchElementException(InfyTQ平台求助)
InfyTQ平台Java等比序列生成题适配方案
问题场景
在Infosys的InfyTQ在线平台完成Java编程题时,遇到以下问题:
- 题目要求:根据输入的序列长度n,生成1,2,4,8...的等比序列
- 本地VS Code及其他在线编译器运行正常,但平台抛出
java.util.NoSuchElementException - 平台环境不可修改,需调整代码适配
初始给定代码
class Tester { public static void main(String[] args) { // Implement your code here } }
自行实现的代码
import java.util.Scanner; class Tester { public static void main(String[] args) { // Implement your code here int sequence=1; Scanner sc = new Scanner(System.in); System.out.print("Enter the length of sequence: "); // input the lenght of the sequence int n = sc.nextInt(); while(n!=0) { System.out.print(sequence); System.out.print(" "); sequence*=2; n-=1; } } }
平台报错信息
Enter the length of sequence: Runtime Exception Exception in thread "main" java.util.NoSuchElementException at java.base/java.util.Scanner.throwFor(Scanner.java:937) at java.base/java.util.Scanner.next(Scanner.java:1594) at java.base/java.util.Scanner.nextInt(Scanner.java:2258) at java.base/java.util.Scanner.nextInt(Scanner.java:2212) at Tester.main(myCode.java:12)
问题根源
- 交互提示干扰输入读取:InfyTQ平台采用非交互式预提供输入的模式,代码中输出的提示文本
Enter the length of sequence:会被平台识别为输出内容,而非输入引导,导致Scanner无法正确定位到输入的整数。 - 无输入有效性判断:未检查输入是否存在,当平台未提供有效输入时,直接调用
nextInt()会抛出异常。
修正后的代码
import java.util.Scanner; class Tester { public static void main(String[] args) { int sequence = 1; Scanner sc = new Scanner(System.in); // 先判断是否有有效整数输入,再执行读取逻辑 if (sc.hasNextInt()) { int n = sc.nextInt(); while (n > 0) { // 改为n>0更贴合"序列元素个数为正整数"的题目逻辑 System.out.print(sequence + " "); sequence *= 2; n--; } } sc.close(); // 规范释放Scanner资源 } }
关键修改点
- 移除交互提示:删除
System.out.print("Enter the length of sequence: "),适配平台非交互式输入机制。 - 增加输入存在性判断:用
sc.hasNextInt()确保存在有效输入后再调用nextInt(),避免无输入时抛出异常。 - 优化循环条件:将
n!=0改为n>0,避免输入负数时进入无效循环,符合题目中“序列元素个数”为正整数的逻辑。 - 规范资源释放:调用
sc.close()关闭Scanner,释放系统资源。
内容的提问来源于stack exchange,提问作者Puru Raj Singh Uppal
相关产品推荐
相关产品推荐

