【JAVA】关于Exception in thread “main” java.io.IOException: Stream closed问题的解决
在利用java实现一个简单加减乘除计算器时遇到的问题,先附上代码
package com.runoob.operator;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class calculator {
public static void main(String[] args) throws IOException {
while (true){
//定义变量
Scanner scanner = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
double num0 = 0;
double num1 = 0;
String operator = "";
//交互
System.out.println("欢迎使用计算器");
System.out.println("请输入第一个数字");
if (scanner.hasNextDouble()){
num0 = scanner.nextDouble();
}
System.out.println("请输入运算符");
operator = br.readLine();
System.out.println("请输入第二个数字");
if (scanner.hasNextDouble()){
num1 = scanner.nextDouble();
}
switch (operator){
case "+":
System.out.println(add(num0,num1));
break;
case "-":
System.out.println(jianfa(num0,num1));
break;
case "*":
System.out.println(chenfa(num0,num1));
break;
case "/":
System.out.println(chufa(num0,num1));
break;
default:
System.out.println("input error");
break;
}
scanner.close();//加入close后,出现了Stream closed
}
}
public static double add(double a,double b){
return a+b;
}
public static double jianfa(double a,double b){
return a-b;
}
public static double chenfa(double a,double b){
return a*b;
}
public static double chufa(double a,double b){
return a/b;
}
}
问题解决
Scanner的数据流关闭一次就打不开了,所以如果把close放在前面就会出错,而方法体内是循环,在最后一次关闭比较麻烦,所以将Scanner设为静态,并在main函数用完Scanner后再关闭。