Привет всем! Я работаю над проектом, и у меня небольшие проблемы. Я получаю исключение java.util.InputMismatchException. Любая помощь будет принята с благодарностью. Я новичок в программировании на java, так что простите меня, если я сделал очевидную глупую ошибку. Цель программы - прочитать файл, получить первые три строки для использования для 6 различных переменных (три целых числа и три строки), затем прочитать остальную часть файла, отформатировать ее и выполнить некоторые математические вычисления, а затем поместить ее в новый файл. . Файл, из которого я беру данные, отформатирован следующим образом.

Суд 50

Вставка 10

Клуб 25

Коробка Мошенника Конвея 10

Лоретта Барретт 3 Корт

Loras Tyrell 5 Club

Margaery Tyrell 8 Box.

Вот код:

public class ProjectTicket {
    public static void main(String[] args) throws IOException {

        /////////////////////// amount of tickets person would buy 
        int amount;
        /////////////////////// the tickets prices
        int tprice1 = 0;
        int tprice2 = 0;
        int tprice3 = 0;
        //////////////////////the ticket types
        String ticket1 = null;
        String ticket2 = null;
        String ticket3 = null;

        ////////////////////// the total price
        int price = 0;
        ////////////////////// customers name 
        String firstName;
        String lastName;
        ////////////////////// name of seat type
        String seat;


        PrintWriter outputFile = new PrintWriter("portland2out.txt");
        File file = new File("portlandvip2.txt");
        Scanner inputFile = new Scanner(file);

        ////////////////////// getting ticket name and ticket price

        for (int i = 0; i < 2; i++) {
            ticket1 = inputFile.next();
            tprice1 = inputFile.nextInt();
            ticket2 = inputFile.next();
            tprice2 = inputFile.nextInt();
            ticket3 = inputFile.next();
            tprice3 = inputFile.nextInt();
            outputFile.println(ticket1 + " " + "$" + tprice1);
            outputFile.println(ticket2 + " " + "$" + tprice2);
            outputFile.println(ticket3 + " " + "$" + tprice3);

        }

        ////////////////////// getting customer name,number of tickets, type of ticket
        while (inputFile.hasNext()) {
            firstName = inputFile.next();
            lastName = inputFile.next();
            amount = inputFile.nextInt();
            seat = inputFile.next();
            ////////////////////////////////// doing math for final billing.  
            if (seat.equals(ticket1))
                price = tprice1 * amount;
            else if (seat.equals(ticket2))
                price = tprice2 * amount;
            else if (seat.equals(ticket3))
                price = tprice3 * amount;
            ///////////////////////////////// printing in format to file

            outputFile.printf("%-10s%-10s$%,.2f\n", firstName, lastName, price);


        }
        inputFile.close();
    }
}

Вот ошибка:

java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at BlancovichProject2.main(BlancovichProject2.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at      edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

Я не уверен, в чем может быть проблема. Я осмотрелся, и кажется, что тип ошибки выдается, когда полученная информация не совсем то, что она искала. Еще раз спасибо за любую помощь!

0
Jblanc 25 Апр 2014 в 02:48

2 ответа

Лучший ответ

Вы пытаетесь использовать

ticket1 = inputFile.next();
tprice1 = inputFile.nextInt();

Для данных, которые выглядят как Rascal Conway 10 Box, поэтому вы пытаетесь прочитать Conway как целое число, которое выбрасывает InputMismatchException.

0
Pshemo 24 Апр 2014 в 22:56

Это работает, но вам просто нужно выполнить итерацию только один раз или снять forloop

изменение:

for (int i = 0; i < 2; i++) {
        ticket1 = inputFile.next();
        tprice1 = inputFile.nextInt();
        ticket2 = inputFile.next();
        tprice2 = inputFile.nextInt();
        ticket3 = inputFile.next();
        tprice3 = inputFile.nextInt();
        outputFile.println(ticket1 + " " + "$" + tprice1);
        outputFile.println(ticket2 + " " + "$" + tprice2);
        outputFile.println(ticket3 + " " + "$" + tprice3);

    }

на это

        ticket1 = inputFile.next();
        tprice1 = inputFile.nextInt();
        ticket2 = inputFile.next();
        tprice2 = inputFile.nextInt();
        ticket3 = inputFile.next();
        tprice3 = inputFile.nextInt();
        outputFile.println(ticket1 + " " + "$" + tprice1);
        outputFile.println(ticket2 + " " + "$" + tprice2);
        outputFile.println(ticket3 + " " + "$" + tprice3);

Также у вас неправильное форматирование printf. Чтобы проверить результаты, закомментируйте

 //outputFile.printf("%-10s%-10s$%,.2f\n", firstName, lastName, price);

И добавьте это, чтобы убедиться, что у вас правильный результат:

System.out.printf("%-10s%-10s$%,d\n", firstName, lastName, price);

Тогда, если они правы ... вы можете вывести это в свой файл ..

0
Rod_Algonquin 24 Апр 2014 в 23:34