java为什么这一行是charg=(char)(br.read());被跳过?
在这个程序中,每当我运行程序时,char g = (char)(br.read())
行就会被跳过。在输入年龄后,如果我将性别输入为m,我将得到错误java。lang.NumberFormatException
import java.io.*;
public class Tax
{
public static void main()throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.println("Enter age");
int age = Integer.parseInt(br.readLine());
System.out.println("Enter gender as m or f");
char g = (char)(br.read());
System.out.println("Enter Taxable Income");
int ti = Integer.parseInt(br.readLine());
double in;
if (age > 65 || g == 'f')
System.out.println("Wrong Category");
else
{
if (ti <= 160000)
in = 0;
else if(ti > 160000 && ti<=500000)
in = (ti - 160000) * (10.0/100.0);
else if(ti > 500000 && ti<=800000)
in = (ti - 50000) * (20.0/100.0) + 34000;
else
in = (ti - 800000) * (30.0/100.0) + 94000;
System.out.println("Income Tax = " + in);
}
}
}
但是,如果程序按如下方式修改,即如果char g = (char)(br.read());
被String g = br.readLine()
替换,则它可以工作
import java.io.*;
public class Tax
{
public static void main()throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.println("Enter age");
int age = Integer.parseInt(br.readLine());
System.out.println("Enter gender as m or f");
String g = br.readLine();
System.out.println("Enter Taxable Income");
int ti = Integer.parseInt(br.readLine());
double in;
if (age > 65 || g.equalsIgnoreCase("f"))
System.out.println("Wrong Category");
else
{
if (ti <= 160000)
in = 0;
else if(ti > 160000 && ti<=500000)
in = (ti - 160000) * (10.0/100.0);
else if(ti > 500000 && ti<=800000)
in = (ti - 50000) * (20.0/100.0) + 34000;
else
in = (ti - 800000) * (30.0/100.0) + 94000;
System.out.println("Income Tax = " + in);
}
}
}
# 1 楼答案
你只读取了一个字节,这意味着如果你写了
如果在数字前有空格,并且键入
这意味着
m
之后的行的其余部分为空我就是这样写的
# 2 楼答案
尝试使用扫描仪,如中所示
# 3 楼答案
问题是,您只从读卡器中读取了一个字符,而行分隔符部分仍有待读取
因此,如果
BufferedReader
逻辑上包含:然后:
readLine()
将消耗"30\r\n"
李>read()
将消耗"m"
而离开\r\n20
readLine()
将消耗"\r\n"
,返回一个空字符串如果您实际上键入“30”,点击return,然后键入“m20”并点击return,它将起作用-但显然这不是您想要的:)
要么使用扫描仪,要么只使用
readLine()
并对照“m”和“f”检查行的内容