报错出不来

报错出不来

https://img1.sycdn.imooc.com/climg/66a31a380973f03922931525.jpg

https://img1.sycdn.imooc.com/climg/66a31a4209efbe4d23691561.jpg

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

登陆购买课程后可参与讨论,去登陆

2回答
Luckin_frank 2024-08-23 20:47:05

问题在于你在 insertData 方法中使用了 try-with-resources 语句来自动关闭 Scanner 对象 sc。这会导致 System.in 输入流被关闭,从而在 main 方法中再次尝试读取输入时,出现 NoSuchElementException

具体分析:

  1. try-with-resources: 这个语句在 insertData 方法结束时会自动关闭 Scanner 对象 sc,并且会关闭与之关联的 System.in 输入流。

  2. main 方法中再次使用 Scanner: 在 main 方法中,你再次创建了一个新的 Scanner 对象 sc。由于 System.in 已经被关闭,这个 Scanner 对象无法读取新的输入,导致出现异常。

解决方法:

  • 不要在 insertData 方法中关闭 Scanner 对象。你可以创建一个 Scanner 对象,并在整个程序运行期间使用它。在程序结束时,再关闭这个对象。

  • 不要关闭 Scanner 对象:避免在程序中关闭 Scanner 对象。可以在程序的最后手动关闭它,或者让程序自动结束时关闭。特别是在使用 System.in 的情况下,不建议手动关闭 Scanner

  • 使用同一个 Scanner 对象:可以只使用一个 Scanner 对象来处理所有输入,这样可以避免因为关闭 Scanner 而导致的问题。

  • package com.project;
    
    import java.util.Scanner;
    
    /**
     * 从键盘接受整形数据存放在数组中,并对数组中的数据进行管理
     * 
     * @author FENG
     */
    public class DataManage {
    	/**
    	 * 从键盘接收数据
    	 * @return 接受数据的数组
    	 */
    	public int[] insertData() {
    		Scanner sc = new Scanner(System.in);
    		int[] a = new int[10];
    		for (int i = 0; i < a.length - 1; i++) {
    			System.out.println("请输入第" + (i + 1) + "个数据:");
    			try {
    				a[i] = sc.nextInt();
    			} catch (java.util.InputMismatchException e) {
    				System.out.println("输入的格式有误,不能有非数字字符出现!");
    				sc.next();
    				i--;
    			}
    		}
    		sc.close();
    		return a;
    	}
    
    	/**
    	 * 显示数组中元素的个数
    	 * @param arr    数组
    	 * @param length 要显示的数组元素的个数
    	 */
    	public void showData(int[] arr, int length) {
    		for (int i = 0; i < length; i++) {
    			System.out.print(arr[i] + "  ");
    		}
    		System.out.println();
    	}
    
    	/**
    	 * 从键盘接受一个数据,插入到数组的指定位置处
    	 * @param a 要插入数据的数组
    	 * @param n 要插入的数据
    	 * @param k 要插入的位置,从0开始
    	 */
    	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 demo = new DataManage();
    		int[] arr = demo.insertData();
    		demo.showData(arr, arr.length - 1);
    		Scanner sc1 = new Scanner(System.in);
    		System.out.println("请输入要插入的数据:");
    		int n = sc1.nextInt();  
    		System.out.println("请输入要插入的位置:");
    		int k = sc1.nextInt();
    		demo.insertAtArray(arr, n, k);
    		demo.showData(arr, arr.length);
    		sc1.close();
    	}
    }

    这是我之前的代码,也出现了这种情况,咱们两个的情况差不多

    2024-08-23 20:50:05
好帮手慕小蓝 2024-07-29 11:29:26

同学你好,经过测试,代码本身并没有错误。从截图中看,是因为项目中其他代码的错误引起的,建议将项目中其他代码的错误解决之后再尝试一下。

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师