今天在尝试修改代码的时候,出现了异常:java.util.NoSuchElementException–
知道是Scanner异常,提示没有此元素,
具体的原因就是我们的scanner 在使用的时候不小心被关闭了,因为关闭的位置不对,所以不要考虑io留关闭的位置,不然容易报错–;
package Test;
import java.util.Scanner;
public class SharkSystem {
private int shouru = 0;
private int zhichu = 0;
private String shouruSM = "";
private String zhichuSM = "";
int balance = 0;
String details = "";//用来接收所有输入的内容
boolean flag = true;//定义标记
public void StartSystem() {//定义方法
// //下面开始循环
while (flag) {
//开机界面
System.out.println("-----欢迎使用鲨鱼记账系统-----");
System.out.println("1,收支明细");
System.out.println("2,登记收入");
System.out.println("3,登记支出");
System.out.println("4,退出系统");
System.out.println("请按照提示选择你要使用的的功能--");
Scanner scanner = new Scanner(System.in);//判断用户输入是否符合要求
int choice = scanner.nextInt();//选择
//检测用户输入的数据并返回相应的请求结果
while (choice != 1 & choice != 2 & choice != 3 & choice != 4) {
System.out.println("请重新输入--");
choice = scanner.nextInt();
}
//定义具体的功能模块//输入对应数字选择功能
switch (choice) {
case 1://收支明细
System.out.println("欢迎使用小鲨鱼收支记账系统》》》");
System.out.println("收支明细--");
//之后再次获取用户输入的内容
//这里打印明细
if (details != "") {
System.out.println(details.substring(0, details.length() - 1) + 2);
} else {
System.out.print(details);
}
break;
case 2://登记收入
System.out.println("请输入您的收入--");
shouru = scanner.nextInt();
System.out.println("请输入收入说明--");
shouruSM = scanner.next();//第一次next
System.out.println("-登记完成-");
balance += shouru;
details = details + "收入:" + shouru + ",收入说明:" + shouruSM + ",账户余额:" + balance + "\n";
break;
case 3://登记支出
System.out.println("请输入您的支出--");
zhichu = scanner.nextInt();
System.out.println("请输入支出说明--");
zhichuSM = scanner.next();
System.out.println("-登记完成-");
balance -= zhichu;
details = details + "支出:" + zhichu + ",支出说明:" + zhichuSM + ",账户余额:" + balance + "\n";
break;
case 4://退出系统
System.out.println("记账系统》》》您确定要退出系统?(Y/N)");
//判断用户输入Y/N
String isExist = scanner.next();
switch (isExist) {
case "Y":
System.out.println("系统已退出,欢迎您下次继续使用!");
scanner.close();
System.exit(1);
}
}
}
}
}
以上代码如果IO流关闭的位置不对,就会报错,比如改动如下
所以涉及到IO流的时候要仔细考虑什么时候关闭IO流合适;