我目前正在尝试创建一个音量,面积,表面积和周长计算器,但我遇到了一些问题
package Volume;
public class C {
static double r;
static double h;
static double volume() {
return (25/7.957747154)*(r*r)*h;
}
}
数据类
package Volume;
import java.io.IOException;
import java.util.Scanner;
public class VC {
public static void main(String args[])
throws IOException {
char s2;
char s1;
Scanner first = new Scanner(System.in);
Scanner second = new Scanner(System.in);
a: {
System.out.println("Chose your Type: \n1.Volume \n2.Area \n3.Surface Area \n4.Perimeter \n5.Exit \nPlease type the number of your option.");
s1 = (char) System.in.read();
switch(s1) {
case '1':
System.out.println("Chose Your Shape: \n1.Cylinder \ntype the number");
s2 = (char) System.in.read();
switch(s2) {
case '1':
System.out.println("Raidius?");
Volume.C.r = first.nextDouble();
System.out.println("Height?");
Volume.C.h = second.nextDouble();
Double v;
v = Volume.C.volume();
System.out.println("The Volume is:" + v);
break a;
}
case '5':
System.out.println("GoodBye");
}
}
}
}
主类
我遇到的问题是在我完成第一个switch语句而不是暂停读取char后它跳过整个块然后转到case'5': 在任何事情完成之前结束程序。
有人可以向我解释一下吗?
答案 0 :(得分:1)
IO缓冲是许多问题的根源,我建议你:
System.in
)System.in.read
first
,没有second
)更多解释:
您正在通过3个不同的对象访问标准输入流(例如用户输入):
first
- System.in
由Scanner
second
- System.in
由Scanner
s2 = (char) System.in.read();
相反,只创建一个Scanner
并将其用于System.in
的所有读取