我有一个我正在为课堂写作的课程,而且我最后一部分都被困在了。这是它要求的内容,以及我坚持的内容:
如果文件不存在或格式不正确,则显示错误 不正确。
输入的格式如下:
名称;服务;价格;日期
或
Bob Smith;晚餐; 52.35; 04-01-2014
到目前为止我的代码:
package school;
import java.util.*;
import java.io.*;
public class HotelSales{
public static void main(String[] args){
try {
BufferedReader br = new BufferedReader(new FileReader("input.txt"));
// I assume the format check would go here?
String[] array = new String[48];
double conferenceTotal = 0;
double dinnerTotal = 0;
double lodgingTotal = 0;
String line = "";
while((line = br.readLine()) != null){
array = line.split(";");
if(array[1].equals("Conference")) {
conferenceTotal += Double.parseDouble(array[2]);
} else if(array[1].equals("Dinner")) {
dinnerTotal += Double.parseDouble(array[2]);
} else if(array[1].equals("Lodging")) {
lodgingTotal += Double.parseDouble(array[2]);
}
}
System.out.println("The totals for the sales are: \n");
System.out.printf("Conference Total: $%-5.2f\n", conferenceTotal);
System.out.printf("Dinner Total: $%-5.2f\n", dinnerTotal);
System.out.printf("Lodging Total: $%-5.2f\n", lodgingTotal);
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"));
bw.write("The totals for the sales are: ");
bw.newLine();
bw.newLine();
bw.write("Conference Total: $" + String.format("%-5.2f",conferenceTotal));
bw.newLine();
bw.write("Dinner Total: $" + String.format("%-5.2f",dinnerTotal));
bw.newLine();
bw.write("Lodging Total: $" + String.format("%-5.2f",lodgingTotal));
br.close();
bw.close();
} catch (InputMismatchException e) { //And that this is the proper catch right?
System.out.print("Wrong input file format.\n");
e.printStackTrace();
} catch (FileNotFoundException e) {
System.out.print("Sorry, the file was not found.\n");
e.printStackTrace();
} catch (IOException e) {
System.out.print("Oops! I/O Exception.\n");
e.printStackTrace();
}
}
}
谢谢! :)
答案 0 :(得分:0)
这应该有效:
while((line = br.readLine()) != null){
String [] array = line.split(";");
if ( array.length != 4 ) {
throw new InputMismatchException( "Invalid ... blah blah, expected 4 elements, found " + array.length );
}
try {
if(array[1].equals("Conference")) {
conferenceTotal += Double.parseDouble(array[2]);
} else if(array[1].equals("Dinner")) {
dinnerTotal += Double.parseDouble(array[2]);
} else if(array[1].equals("Lodging")) {
lodgingTotal += Double.parseDouble(array[2]);
}
} catch ( NumberFormatException nfe ) {
throw new InputMismatchException( nfe );
}
}
并删除该行:
String[] array = new String[48];
答案 1 :(得分:0)
如果您的输入文件没有用;分隔,那么当您尝试Double.parseDouble(array [2])时,您将得到一个ArrayIndexOutOfBoundsException或NullPointerException,因为您的数组大小为1。
while ((line = br.readLine()) != null)
{
array = line.split(";");
if (array.length != 4)
{
throw new InputMismatchException("Invalid ... blah blah, expected 4 elements, found " + array.length);
}
try
{
if (array[1].equals("Conference"))
{
conferenceTotal += Double.parseDouble(array[2]);
}
else if (array[1].equals("Dinner"))
{
dinnerTotal += Double.parseDouble(array[2]);
}
else if (array[1].equals("Lodging"))
{
lodgingTotal += Double.parseDouble(array[2]);
}
}
catch (ArrayIndexOutOfBoundsExceptione aioobe)
{
throw new InputMismatchException(aioobe);
}