Ошибка с вычислением BigDecimal относительно пользовательского ввода - PullRequest
0 голосов
/ 05 августа 2011

У меня есть эта идея для моего задания, где я хотел, чтобы система кассовых аппаратов вычисляла итоговую сумму за элемент, когда пользователь вводит его себестоимость и количество указанного элемента.

Это, похоже, сработало, но потом привело к моей главной проблеме - я хотел позволить пользователю набрать букву "Т" после, скажем, 10 транзакций, чтобы узнать общее количество взятий за день.

Я пытался использовать цикл for с математическим классом BigDecimal в расчетах и ​​т. Д. У меня есть ошибки в словах «valueOf» в моих вычислениях, и Eclipse продолжает пытаться изменить мои значения на «long», и я почти уверен, что это неправильно.

Мое объяснение не удивительно, поэтому я дам вам код, который я написал, и оставлю комментарии рядом с моими ошибками ..

 try{
    Scanner in = new Scanner (System.in);       
    String t = "T";
    int count;

    for (count = 1;count<=10;count++){
           System.out.println("\n\nValue of Item " + count + " :");
       BigDecimal itemPrice = in.nextBigDecimal();
       System.out.println("Quantity of item " + count + " :");
       BigDecimal itemQuantity = in.nextBigDecimal();
       BigDecimal itemTotal = (BigDecimal.valueOf(itemPrice).multiply // error here
                                  (BigDecimal.valueOf(itemQuantity))); // error here
           System.out.println("\nTotal for item(s): £" + itemTotal); 
       count++;

           while (t == "T"){
       BigDecimal amountOfItems = (BigDecimal.valueOf(itemTotal).divide // error here
                                      (BigDecimal.valueOf(itemQuantity))); // error here 
       BigDecimal totalTakings = (BigDecimal.valueOf(itemTotal).multiply // error here
                                     (BigDecimal.valueOf(amountOfItems))); // error here
       System.out.println("The Total Takings For Today is £" + totalTakings + " " );

     }
    }  
   }
  }
 }

Как я уже сказал, «красные линии», которые затмение использует, чтобы показать наличие ошибки, находятся только под словами «valueOf» в моих вычислениях BigDecimal.

Любая помощь будет великолепна, потому что я вырываю свои волосы !!!!

Thanx

Винни.

1 Ответ

2 голосов
/ 05 августа 2011

Нет способа BigDecimal.valueOf(BigDecimal). itemPrice и itemQuantity являются уже BigDecimal значениями - вам не нужно преобразование:

BigDecimal itemTotal = itemPrice.multiply(itemQuantity);

РЕДАКТИРОВАТЬ: Хорошо, так что выше решает вашу немедленную проблему, но у вас также есть:

while (t == "T")
{
    // Loop that never changes the value of t
}

Есть две проблемы с этим:

  • Цикл всегда будет выполняться вечно, не выполняться вообще или продолжаться до тех пор, пока не будет сгенерировано исключение, потому что условие цикла никогда не может измениться, поскольку вы не меняете значение t. Я думаю, вы хотите t = System.in.readLine() в какой-то момент ...
  • Вы сравниваете две строки ссылки здесь, тогда как я подозреваю, что вы хотите сравнить их значения , например,

    while (t.equals("T"))
    
...