报错出不来


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而导致的问题。
- 参与学习 2053 人
- 提交作业 1490 份
- 解答问题 1316 个
2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星