首页 > 解决方案 > 我试图为我的课程做一个税收计算器,但我被困住了,有人可以帮忙,因为我不知道(Java)

问题描述


    import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class RoomTaxSystem {

    public static void main(String args[]) {

        List<String> fileLines = new ArrayList<>();
        try(BufferedReader bufferedReader = new BufferedReader(new FileReader("rooms.txt"))){
            String currentLine;
            while((currentLine = bufferedReader.readLine()) != null) {
                fileLines.add(currentLine);
            }
            bufferedReader.close();

            Scanner inputScanner = new Scanner(System.in);
            String input = "";
            do {
                double taxRate = 20.0;
                System.out.print("Specify Custom Tax Rate [Y|N]: ");
                input = inputScanner.next();
                double TaxRate = inputScanner.nextDouble();
                if(input.equals("Y") || input.equals("y")) {
                    boolean invalidInput;
                    do {
                        invalidInput = true;
                        try {
                            System.out.print("Specify Tax Rate (%): ");
                            taxRate = Double.valueOf(inputScanner.next());
                            invalidInput = false;
                        } catch (NumberFormatException e) { 
                            System.out.println("Invalid input. Input must be a valid double value.");
                        }
                    } while(invalidInput);
                } else {
                    System.out.println("Assuming Tax Rate = " + taxRate + "%");
                }

                double totalIncome = 0.0;
                double totalTaxes = 0.0;

                for(int roomIndex = 0; roomIndex < fileLines.size() / 3; roomIndex++) {
                    String roomType = fileLines.get(roomIndex * 3); 
                    int bookings = Integer.valueOf(fileLines.get((roomIndex * 3) + 1)); 
                    double roomPrice = Double.valueOf(fileLines.get((roomIndex * 3) + 2)); 
                    double income = bookings * roomPrice; 
                    double taxes = income * (taxRate / 100); 
                    totalIncome += income; 
                    totalTaxes += taxes; 

                    System.out.printf("Room Type : %s, Bookings : %d, Room Price : £%.2f, Income : £%.2f, Tax : £%.2f\n", roomType, bookings, roomPrice, income, taxes);
                }

                System.out.printf("Total Income : £%.2f\n", totalIncome);
                System.out.printf("Total Taxes : £%.2f\n", totalTaxes);
                System.out.print("Rerun the program? [Y|N]: ");
                input = inputScanner.next();
            } while(input.equals("Y") || input.equals("y"));
        } catch (IOException e) {
            System.out.println("Error when reading the \"rooms.txt\" file.");
        }
    }
}

单人 5 23.50

双3 27.50

Suite 2 50.00 ^上面的数字是 AI 需要用于税收计算器的附录,但无法确定我哪里出错了所有帮助将不胜感激如果不是很好,我似乎无法弄清楚这是它在应用程序启动时应该做的,系统应询问管理人员是否希望指定自定义税率,这应采用是/否问题的形式。当经理说是时,系统应要求输入税率(从键盘),然后将覆盖默认税率(即附录 B)。当经理说不时,系统应该(在屏幕上)报告默认税率(即附录 C)。接下来,系统应该循环遍历房间的数据,计算并打印(到屏幕上)房间类型、预订数量、房间价格、税前收入和税前收入,后两者需要一些基本的计算。最后,应在系统正常退出之前计算并打印税前收入和税前收入的运行总计。这就是我单击运行时发生的情况


    Specify Custom Tax Rate [Y|N]: y
Y
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
    at RoomTaxSystem.main(RoomTaxSystem.java:26)

标签: java

解决方案


问题在这里:

double TaxRate = inputScanner.nextDouble();

您正在对字符串使用 get next double 方法


推荐阅读