2015-05-05 2 views
0

мой код компилируется, но когда я пытаюсь запустить его, сообщение об ошибке говорит, что есть исключение в главном java.util.illegalFormatConversionException. Как я могу это исправить? я уверен, что я получил заполнители для каждой переменной?исключение ошибки java в потоке «main» java.util.illegalFormatConversionException

import javax.swing.JOptionPane; 

public class BookTest 
{ 
    public static void main(String args[]) 
    { 
    double charge; 
    double totalCharge=0; 
    double totalTax=0; 
    double grandTotal=0; 

    String dataArray[][] = {{"NonFiction", "Abraham Lincoln Vampire Hunter","Grahame-Smith","978-0446563079","13.99","Haper","NY","US","Political"}, 
      {"NonFiction", "Frankenstein","Shelley","978-0486282114","7.99","Pearson", "TX","England", "Historical"}, 
      {"Fiction", "Dracula","Stoker","978-0486411095","5.99","Double Day", "CA","4918362"}, 
      {"NonFiction", "Curse of the Wolfman"," Hageman","B00381AKHG","10.59","Harper", "NY","Transylvania","Historical"}, 
      {"Fiction", "The Mummy","Rice","978-0345369949","7.99","Nelson","GA","3879158"}}; 

    Book bookArray[] = new Book[dataArray.length]; 

    int quantityArray[] = {12, 3, 7, 23, 5}; 


    for (int i = 0; i < dataArray.length; i++) 
    { 
     if (dataArray[i][0].equals("NonFiction")) 
     { 
     bookArray[i] = new NonFictionBook(dataArray[i][1], dataArray[i][2], dataArray[i][3], Double.parseDouble(dataArray[i][4]), 
     new Publisher(dataArray[i][5], dataArray[i][6]), dataArray[i][7], dataArray[i][8]); 
     } 
     else 
     { 
     bookArray[i] = new FictionBook(dataArray[i][1], dataArray[i][2], dataArray[i][3], Double.parseDouble(dataArray[i][4]), 
     new Publisher(dataArray[i][5], dataArray[i][6]), Integer.parseInt(dataArray[i][7])); 
     } 
    } 

    String msg = ""; 
    for (int i = 0; i < bookArray.length; i++) 
    { 
     charge = bookArray[i].calculateTotal(quantityArray[i]); 
     totalTax = bookArray[i].calculateTax(bookArray[i].calculateTotal(quantityArray[i])); 

     totalCharge = charge + totalCharge; 
     grandTotal = totalCharge + totalTax; 

     if (bookArray[i] instanceof FictionBook) 
     { 
     FictionBook fb = (FictionBook)bookArray[i]; 
     msg += String.format("%s %d $%.2f $%.2f\n", fb.getTitle(), fb.getCode(), charge, fb.calculateTax(fb.calculateTotal(quantityArray[i]))); 
     } 

     if (bookArray[i] instanceof NonFictionBook) 
     { 
     NonFictionBook nfb = (NonFictionBook)bookArray[i]; 
     msg += String.format("%s %s $%.2f $%.2f\n", nfb.getTitle(), nfb.getCategory(), charge, nfb.calculateTax(nfb.calculateTotal(quantityArray[i]))); 
     } 
    } 
    // ––– this is where the error is at 
    msg += String.format("Total $%.2f", "Total Tax $%.2f", "Grand Total $%.2f", totalCharge, totalTax, grandTotal); 

    JOptionPane.showMessageDialog(null, msg); 
    } 
} 
+1

Это будет экспоненциальная помощь нам, если вы могли бы указать, какая строка кода вызывала проблему. –

+0

Добавить stacktrace пожалуйста – Jens

ответ

1

Посмотрите на этот вызов - я положил аргументы в разных строках:

String.format(
    "Total $%.2f", 
    "Total Tax $%.2f", 
    "Grand Total $%.2f", 
    totalCharge, 
    totalTax, 
    grandTotal) 

Вот проходящими "Total $%.2f" в качестве строки формата, а затем пять значений, которые будут отформатированы в этой строке - первый из которых сам строка, но вы пытаетесь отформатировать ее в качестве поплавка. Я подозреваю, что вы действительно хотели что-то вроде:

String.format(
    "Total $%.2f%nTotal Tax $%.2f%nGrand Total $%.2f", 
    totalCharge, 
    totalTax, 
    grandTotal) 

Здесь мы получили строку формата с тремя заполнителей, а затем три значения в формате - что делает намного больше смысла. %n в строке формата представляет собой новую строку.

Если не то, что вы хотите, вы должны быть понятнее, о чем вы ожидали сломанный код, чтобы сделать ...

+0

Да, это сработало благодаря тому, что я буду помнить, что в следующий раз – Student214

0

Проверьте кавычки.

Вы пытаетесь отформатировать "Total $%.2f" с "Total Tax $%.2f".

0

Не удается удалить ответ в приложении. Поставит с рабочего стола позже.

0

Ваша линия должна выглядеть так:

msg += String.format("Total $%.2f, Total Tax $%.2f, Grand Total $%.2f", totalCharge, totalTax, grandTotal); //this is where the error is at 

удалить doublequotes внутри строки.

Смежные вопросы