报错出不来
package com.Imooc.datamanage; import java.util.InputMismatchException; import java.util.Scanner; public class DataManage { public int[] insertData(){ int[] a=new int[10]; try (Scanner sc = new Scanner(System.in)) { //少接收一个数据,为在指定位置插入数据做准备 for(int i=0;i<a.length-1;i++) { System.out.println("请输入第"+(i+1)+"个数据:"); try { a[i]=sc.nextInt(); }catch(InputMismatchException e) { System.out.println("输入的数据格式有误,不能有小数!"); sc.next(); i--; } } return a; } } public void showData(int[] a,int length) { for(int i=0;i<length;i++) { System.out.println(a[i]+""); } System.out.println(); } //注意从最后一个数据开始移动,避免数据覆盖 public void insertAtArray(int[]a,int n,int k) { for(int i=a.length-1;i>k;i--) { a[i]=a[i-1]; } a[k]=n; } public static void main(String[] args) { DataManage dm=new DataManage(); int[] a=dm.insertData(); dm.showData(a,a.length-1); Scanner sc = new Scanner(System.in); System.out.println("请输入要插入的数据: "); int n=sc.nextInt(); System.out.println("请输入要插入的位置: "); int k=sc.nextInt(); dm.insertAtArray(a,n,k); dm.showData(a,a.length); } } 问题描述:不知道为啥51行一直提示报错
正在回答 回答被采纳积分+1
问题在于你在 insertData
方法中使用了 try-with-resources
语句来自动关闭 Scanner
对象 sc
。这会导致 System.in
输入流被关闭,从而在 main
方法中再次尝试读取输入时,出现 NoSuchElementException
。
具体分析:
try-with-resources
: 这个语句在insertData
方法结束时会自动关闭Scanner
对象sc
,并且会关闭与之关联的System.in
输入流。main
方法中再次使用Scanner
: 在main
方法中,你再次创建了一个新的Scanner
对象sc
。由于System.in
已经被关闭,这个Scanner
对象无法读取新的输入,导致出现异常。
解决方法:
不要在
insertData
方法中关闭Scanner
对象。你可以创建一个Scanner
对象,并在整个程序运行期间使用它。在程序结束时,再关闭这个对象。不要关闭
Scanner
对象:避免在程序中关闭Scanner
对象。可以在程序的最后手动关闭它,或者让程序自动结束时关闭。特别是在使用System.in
的情况下,不建议手动关闭Scanner
。使用同一个
Scanner
对象:可以只使用一个Scanner
对象来处理所有输入,这样可以避免因为关闭Scanner
而导致的问题。
- 参与学习 2030 人
- 提交作业 1355 份
- 解答问题 1232 个
2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星