在switch语句中的case 4中,在输入插入数值后如果输入的数值类型不正确,程序就会出现无限死循环,请问是哪里出现了问题呢?

来源:3-4 项目作业

菊儿胡同

2021-03-23 16:45:15

​import java.util.InputMismatchException;
import java.util.Scanner;

/**
* 从键盘接收数据,并按照输入的数字选择相应的操作
* 1--初始化学生的数学成绩并存入数组(5名学生)
* 2--求成绩的平均值
* 3--统计成绩大于85的人数
* 4--修改指定位置处的成绩
* 5--打印输出所有成绩
* 0--退出
*
*/

public class DataManageHomeWork {
Scanner sc = new Scanner(System.in);
int[] arr = new int[5];
/**
* 从键盘接收数据(学生成绩)并存入数组中
*/
public int[] insertData(){
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第"+(i+1)+"个整数:");
try {
arr[i] = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("数据类型不正确,请重新输入!");
sc.next(); //用于接收错误的输入
i--;
}
}
System.out.println("您已完成全部的输入");
//showData(arr);
return arr;
}

/**
* 求数组中元素的平均值(学生的平均成绩)
*/
public void averageScore(int[] a){
int totalScore = 0;
int averageScore = 0;
for (int i = 0; i < a.length; i++) {
totalScore = totalScore+a[i];
}
averageScore = totalScore / a.length;
System.out.println("学生的平均成绩为:"+ averageScore);
}

/**
* 统计元素数值大于85的数量
*/
public void statisticData(int[] a){
int count = 0;
for (int i = 0; i < a.length; i++) {
if(a[i]>85){
count++;
}
}
System.out.println("成绩大于85分的一共有"+count+"位");
}

/**
* 修改指定处位置的值
*/
public void updateData(int[]a, int k, int v){
a[k] = v;
System.out.print("修改后");
showData(arr);

}

/**
* 打印输出所有的成绩
*/
public void showData(int[] a){
System.out.println("数组中的所有元素为:");
for (int i = 0; i < a.length; i++) {
if(i != a.length-1){
System.out.print(a[i]+",");
}else{
System.out.print(a[i]);
}
}
System.out.println("");
}

/**
* 提示信息
*/
public void notice(){
System.out.println("********************************************");
System.out.println(" 1--初始化学生的数学成绩并存入数组(5名学生)");
System.out.println(" 2--求成绩的平均值");
System.out.println(" 3--统计成绩大于85的人数");
System.out.println(" 4--修改指定位置处的成绩");
System.out.println(" 5--打印输出所有成绩");
System.out.println(" 0--退出");
System.out.println("********************************************");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//创建DataManageHomeWork实例
DataManageHomeWork dmh = new DataManageHomeWork();
//定义一个长度为5的整型数组
int[] arr = null;
//定义一个整型数据 用于接收用户输入
int input = 0;
//定义整型数据 key value 用于接收用户指定的位置和修改值
int key = 0;
int value = 0;

while(true){
dmh.notice();
System.out.println("请输入相应的数字:");
try {
input = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("数据输入类型不正确,不能有非数字,请重新输入!");
sc.next();
continue;
}
if(input == 0){
break;
}
switch(input){
case 1:
arr= dmh.insertData();
dmh.showData(arr);
break;
case 2:
if(arr == null){
System.out.println("数组中还没有数据,请重新输入");
}else{
dmh.averageScore(arr);
}
break;
case 3:
if(arr == null){
System.out.println("数组中还没有数据,请重新输入");
}else{
dmh.statisticData(arr);
}
break;
case 4:
while(true) {
if (arr == null) {
System.out.println("数组中还没有数据,请重新输入");
} else {
System.out.println("数组长度为:" + arr.length);
System.out.print("请输入需要修改的数组的位置:");
try {
key = sc.nextInt();
while (key > (arr.length - 1)) {
System.out.print("输入的数值超出范围,请重新输入:");
key = sc.nextInt();
}
System.out.println("");
System.out.print("请输入需要插入的数值:");
value = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("数据类型不正确,请重新输入!");
continue;
}
dmh.updateData(arr, key, value);
dmh.showData(arr);
}
break;
}
case 5:
if(arr == null) {
System.out.println("数组中还没有数据,请重新输入");
}else{
dmh.showData(arr);

}
break;
default:
System.out.println("输入的数值超出范围,请重新输入");
break;

}
}

}
}

http://img.mukewang.com/climg/6059aa4109dfed9900000000.jpg



写回答

1回答

好帮手慕阿园

2021-03-23

同学你好,当输入有误时,在catch语句中需要有用来接收错误数据的语句,否则就会进入死循环

修改如下

http://img.mukewang.com/climg/6059b336091e1f5404600134.jpg

在同学的代码中也有类似的操作,如下,原理是一样的

http://img.mukewang.com/climg/6059b3a60965f8f105550229.jpg

祝学习愉快~

1

0 学习 · 11489 问题

查看课程