以下程序代码 关闭键盘输入 就会出现错误怎么解决? 要如何写关闭键盘代码才不会产生错误?
package com.imooc.system;
import java.util.Scanner;
/*老师你好!我这个程序一直有一个问题就是开启键盘输入之后,要在哪个地方关闭键盘呢?
* 为什么我一旦在一个方法结束之前关闭键盘,就会出现运行错误?
* 以下需要用到开启键盘的方法当中,关闭键盘的代码被我注释掉了,不然在运行当中就会提示错误,
* 麻烦老师帮我看看到底是哪里出问题了,谢谢!再次谢谢老师,老师辛苦了!
* (如果没有解决掉关闭键盘这个问题,文件一直会有一个感叹号!存在,那就不完美了,哈哈!)
*/
public class systemWork {
// 显示用户操作提示信息的方法; (无参无返回值的方法)
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 int[] insertData(int length) {
int[] a = new int[length]; // 声明一个长度为length的整形数组;
Scanner sc1 = new Scanner(System.in); // 开启键盘;
if (a[a.length - 1] == 0) { // 判断数组是否为空,为空则输入数组元素并遍历输入数组内容;
for (int i = 0; i < a.length - 1; i++) {
System.out.println("请输入第" + (i + 1) + "个元素");
int n = sc1.nextInt();
if (n != 0) {
a[i] = n;
} else {
do {
System.out.println("数组元素默认值为0,所以请重新输入其它合法数值");
int n1 = sc1.nextInt();
if (n1 != 0) {
a[i] = n1;
break;
}
} while (true);
}
}
System.out.println("输入的数组元素为: ");
for (int i = 0; i < a.length - 1; i++) {
System.out.print(a[i] + " ");
}
System.out.println(); // 换行
} else { // 不为空则遍历所有数组内容;
System.out.println("数组元素已经存在,具体元素如下: ");
for (int i : a) {
System.out.print(a[i] + " ");
}
System.out.println(); // 换行
}
// sc1.close(); // 老师!这里怎么关闭键盘;如果在这里加入这段代码后就会出错???
notice(); // 输出提示信息;
return a; // 返回当前a数组;
}
// 显示用户为数组插入的所有数据;
public void showData(int[] a, int length) {
if (a[0] != 0) {
System.out.println("数组元素的内容为:");
for (int i = 0; i < length; i++) {
if (a[i] != 0) {
System.out.print(a[i] + " ");
}
}
} else {
System.out.println("数组为空不能显示,请按1键,插入数据方可操作!");
}
System.out.println(); // 换行
notice(); // 输出提示信息;
}
// 在指定位置修改数据;
public void insertAtArray(int[] a, int n, int k) {
if (a[0] != 0) {
System.out.println("请输入要修改数据的值:");
Scanner sc2 = new Scanner(System.in);
n = sc2.nextInt();
if(n!=0) {
System.out.println("请输入要修改的位置:");
k = sc2.nextInt();
if (k < a.length) {
a[k] = n;
System.out.println("恭喜!a[" + k + " ]的值已经成功修改为:" + a[k]);
} else {
do {
System.out.println("输入的数值不在数值的长度范围,请重新输入要修改的位置!");
int k1 = sc2.nextInt();
if (k1 < a.length) {
a[k1] = n;
System.out.println("恭喜!a[" + k1 + " ]的值已经成功修改为:" + a[k1]);
break;
}
}while(true);
}
}else {
do {
System.out.println("数组元素默认值为0,所以请重新输入其它合法数值");
int n1 = sc2.nextInt();
if (n1 != 0) {
System.out.println("请输入要修改的位置:");
k = sc2.nextInt();
if (k < a.length) {
a[k] = n1;
System.out.println("恭喜!a[" + k + " ]的值已经成功修改为:" + a[k]);
} else {
do {
System.out.println("输入的数值不在数值的长度范围,请重新输入要修改的位置!");
int k1 = sc2.nextInt();
if (k1 < a.length) {
a[k1] = n1;
System.out.println("恭喜!a[" + k1 + " ]的值已经成功修改为:" + a[k1]);
break;
}
}while(true);
}
break;
}
} while (true);
}
} else {
System.out.println("数组为空不能修改,请按1键,插入数据方可操作!");
}
notice(); // 输出提示信息;
// sc2.close(); //老师!这里怎么关闭键盘;如果在这里加入这段代码后就会出错???
}
// 判断数组中有没有能被num整除的数值,有的话返回true,没有则返回false;
public boolean divNum(int[] a, int num) {
boolean flag = false;
for (int i = 0; i < a.length; i++) {
if (a[i] % num == 0 && a[i] != 0) {
flag = true;
break;
}
}
return flag;
}
// 查出数组中是否能被三整除的元素,并显示输出;
public void divThree(int[] a, int num) {
boolean flag = divNum(a, num); // 通过判断方法,返回有没有能过被num整数的元素真假
if (flag) {
System.out.println("搜索数组中能过被 " + num + " 整除的数值有:");
for (int i = 0; i < a.length; i++) {
if (a[i] % num == 0 && a[i] != 0) {
System.out.print(a[i] + " ");
}
}
} else {
System.out.println("数组为空 或 在数组中没有找到能被 " + num + " 整除的数值");
}
System.out.println();
notice(); // 输出提示信息;
}
// ----------------------------------------------------以下是主方法-------------------------------------------------------
public static void main(String[] args) {
int[] arr = new int[10]; // 创建一个数组长度为10的整形数组
systemWork sw = new systemWork(); // 创建对象
sw.notice(); // 显示用户提示信息
Scanner sc = new Scanner(System.in); // 开启键盘;
while (true) {
int n = sc.nextInt();
switch (n) {
case 1:
arr = sw.insertData(arr.length); // 传入数组长度并插入数据,返回数组信息
break;
case 2:
sw.showData(arr, arr.length); // 显示返回指定长度的所有数组元素
break;
case 3:
sw.insertAtArray(arr, 22, 2);
break;
case 4:
sw.divThree(arr, 3); // 传参并显示返回数组中能被num整除的数值;
break;
case 0:
sc.close();
System.out.println("退出程序!");
System.exit(0);
default:
System.out.println("非法数值,请重新输入!");
continue;
}
}
}
}
正在回答 回答被采纳积分+1
写了一段代码,你可以参考一下,没有任何感叹号。
import java.util.Scanner; public class Demo { static Scanner sc=new Scanner(System.in); public void display(){ int n=sc.nextInt(); System.out.println(n); } public static void main(String[] args) { // TODO Auto-generated method stub String s= sc.next(); System.out.println(s); sc.close(); } }
老师你好,我按照您说的方法把这段代码放在类定义的开始,但是还是一样的感叹号提示 ,并没有改变?
- 参与学习 人
- 提交作业 5461 份
- 解答问题 7235 个
此次推出的专题为Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始学习Android开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星