请问大神代码错在哪里

请问大神代码错在哪里

import java.util.Scanner;

public class Homework {
	//插入数据
	public int[] insertData() {
		int[] a;
		Scanner sc = new Scanner(System.in);
		a = new int[10];
		for(int i = 0; i < a.length - 1; i++) {
			System.out.println("请输入第" + (i + 1) + "个数据:");
			a[i] = sc.nextInt();		
		}
		showData(a, 9);
		sc.close();
		return a;
	}
	
	//显示所有数据
	public void showData(int[] a, int length) {
		System.out.println("数组元素为:");
		for(int i = 0; i < length; i++) {
			System.out.print(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;
		showData(a, 10);
		
	}
	
	//查询能被3整除的数据
	public void divthree(int[] a) {
		System.out.println("数组中能被3整除的元素为:");
		for(int n : a) {
			if( n % 3 == 0)
			{
				System.out.print(n + " ");
			}
		}
		
	}
	
	//显示提示信息
	public void notice() {
		System.out.println("********************************");
		System.out.println("       1--插入数据");
		System.out.println("       2--显示所有数据");
		System.out.println("       3--在指定位置处插入数据");
		System.out.println("       4--查询能被3整除的数据");
		System.out.println("       0--退出");		
		System.out.println("********************************");
		System.out.println("请输入对应的数据进行操作:");
		
	}
	
	public static void main(String[] args) {
		Homework hw = new Homework();
		Scanner sc1 = new Scanner(System.in);
		
		int order = -1;
		int length = 0;
		int[] arr;
		arr = new int[10];
		int n, k;
		
		while (true) {
			hw.notice();
			order = sc1.nextInt();
			
			if(order == 0) {
				System.out.println("程序结束!");
				break;
			}
			
			switch(order) {
			
			case 1: arr = hw.insertData(); break;
		
			case 2: 
				for(int m : arr) {
					if(m != 0) {
						length++;
					}
				}
				hw.showData(arr, length); 
				break;
				
			case 3: 
				System.out.println("请输入要插入的数据:");
				n = sc1.nextInt();
				System.out.println("请输入要插入数据的位置:");
				k = sc1.nextInt();
				
				hw.insertAtArray(arr, n, k); 
				break;
				
			case 4: hw.divthree(arr); break;
				
			default: System.out.println("输入错误,请重试.");
			}
			
		}
		sc1.close();
	}
}

每次到主调函数while循环里的order = sc1.nextInt();这一步就报错,请问是什么错误呢?

正在回答

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

1回答

在你的insertData方法里,不能关闭Scanner对象,不然,当你在执行insertData方法时,就会清空Scanner对象的所有缓存,导致出现NoSuchElementException异常。

解决方案:把insertData方法里 sc.close()这句代码去掉。

如果解决了你的疑惑,请采纳,祝学习愉快~

  • kira168 提问者 #1
    非常感谢~ 请问去掉insertData方法里面的sc.close()后总是有Resource leak: 'sc' is never closed的警告,该怎么做呢?
    2017-08-03 16:18:36
  • kira168 提问者 #2
    非常感谢!
    2017-08-03 16:28:45
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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