在这个程序中,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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果程序被修改如下,即如果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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是你只是从阅读器中读取一个字符 - 仍然要读取行分隔符部分.
所以如果BufferedReader逻辑上包含:
30\r\nm\r\n20
Run Code Online (Sandbox Code Playgroud)
然后:
readLine()第一次打电话会消耗掉"30\r\n".read()然后呼叫将消耗"m"离开\r\n20readLine()第二次调用将消耗"\r\n",返回一个空字符串如果你实际输入 "30",点击返回,然后输入"m20"并点击返回,它会起作用 - 但显然这不是你想要的:)
要么使用扫描仪,要么只使用readLine()并检查"m"和"f"的行内容.
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |