我正在使用这种方法
static void readFile()
{
try
{
FileInputStream fstream = new FileInputStream( "Insurances.txt" );
BufferedReader br = new BufferedReader( new InputStreamReader( fstream ) );
String strLine;
String [] array;
while ( ( strLine = br.readLine() ) != null )
{
array = strLine.split( "," );
pword++;
int type = Integer.parseInt(array[0]);
int tm = Integer.parseInt(array[1]);
int year = Integer.parseInt(array[2]);
int month = Integer.parseInt(array[3]);
int day = Integer.parseInt(array[4]);
int pass = Integer.parseInt(array[5]);
double tc = 0;
if ( type==2 )
{
String man = array[6];
String mod = array[7];
int cc = Integer.parseInt(array[8]);
String lp = array[9];
String ex = array [10];
boolean extra;
if ( ex.equals("true") )
{
extra = true;
}
else
{
extra = false;
}
insurances[insur] = new CarInsurance( pword, type, tm, year, month, day, pass, tc, man, mod, cc, lp, extra );
tc = insurances[insur].calculateCost( pass, a, insur );
insurances[insur].setCost( tc );
insur++;
}
else
{
insurances[insur] = new LifeInsurance( pword, type, tm, year, month, day, pass, tc );
tc = insurances[insur].calculateCost( pass, a, insur );
insurances[insur].setCost( tc );
insur++;
}
System.out.println("y");
}
inp.close();
}
catch ( Exception e )
{
e.getMessage();
}
}
从txt文件中读取一些信息并创建LifeInsurance类或CarInsurance的对象。我使用这个System.out.println("y");
的原因是看它是否完成了与我想要创建的对象一样多的循环。当我尝试运行我的程序时,我只得到7个循环(7年),但我需要13.以下是我在txt文件上写的:
1,12,2013,6,1,1939
2,12,2008,1,10,1939,奔驰,E200,2000,AEX32100,假
2,12,2009,1,11,1939,奔驰,E200,2000,AEX32100,假
2,12,2009,2,10,1940,菲亚特,蓬,1400,BIO1245,假
2,12,2009,2,10,1940,座椅,伊维萨,1600,BIE3987,假
2,12,2010,1,10,1940,座椅,伊维萨,1600,BIE3987,假
2,12,2013,6,1,1941,奥迪,A4,1600,IXE1256,真
1,12,2008,1,2,1942
1,12,2009,1,2,1942
1,12,2010,1,2,1942
1,12,2011,1,2,1943
2,12,2010,7,23,1943,雷诺,克里奥,1400,ZIO3890,真
2,12,2011,7,23,1943,雷诺,克里奥,1400,ZIO3890,真
你能不能帮帮我,因为我找不到它没有完成所有13个循环的原因。提前谢谢。
答案 0 :(得分:1)
您应该看到LifeInsurance类的第18行建议您的堆栈跟踪:
LifeInsurance.calculateCost上的java.lang.NullPointerException(LifeInsurance.java:18)
第8行的数据似乎在成本计算中会产生一些空值。
为了知道是不是来自不期望的数据类型或代码中的问题,你应该首先用第8行替换第1行,然后如果你不想尝试调试则逐个替换参数你的代码。
(对不起“答案”似乎我无法添加评论)
答案 1 :(得分:0)
我假设你在Insurances.txt
的所有记录都在不同的行上,因为如果一个人仔细阅读,你的数据会有13个不同的记录。
您还应该关注@jlordo所说的内容并将e.getMessage()
更改为e.printStackTrace()
。通过这样做并运行代码,我得到了
话虽如此,您还应该修剪strLine.split(",")
电话产生的所有字符串。例如(没有错误检查)使用此Integer.parseInt(array[0].trim())
代替此Integer.parseInt(array[0])
。
通过修剪,我能够看到'y'打印13次。
答案 2 :(得分:-1)
如果您的输入文件没有13行,您将永远不会获得13个循环。您的程序应该一次读取一行。