2010-12-26 2 views
2

Я делаю упражнения первой главы в своей книге Java, и я некоторое время задерживался на проблему. Я напечатаю вопрос,нужна помощь с некоторыми базовыми java

запрос/прочитайте двойное значение, представляющее собой денежную сумму. Затем определите наименьшее количество каждого счета и монеты, необходимых для представления этой суммы, начиная с самого высокого (предположим, что десятидолларовая купюра является максимальным размером). Например, если введенное значение 47,63 (сорок семь долларов и шестьдесят три цента), и программа должна напечатать эквивалентную сумму в качестве:

  1. 4 десять долларовых банкнот
  2. 1 пять долларовых купюр
  3. 2 один долларовых банкнот
  4. 2 четверти
  5. 1 Dimes
  6. 0 Никелс
  7. 3 пенсы»

т.д.

Я делаю пример точно так, как они сказали, чтобы получить представление о том, как вы увидите в коде. Тем не менее мне удалось распечатать 4 доллара, и я не могу понять, как получить «1 пять долларов», всего 7 долларов (см. Код).

Пожалуйста, не используйте весь код для меня. Мне просто нужен совет в отношении того, что я сказал. Спасибо.

import java.util.Scanner; 

public class PP29 { 
    public static void main (String[] args) { 

     Scanner sc = new Scanner (System.in); 

     int amount; 
     double value; 
     double test1; 
     double quarter; 

     System.out.println("Enter \"double\" value: "); 
     value = sc.nextDouble(); 

     amount = (int) value/10;  // 47,63/10 = 4. 
     int amount2 = (int) value % 10; // 47 - 40 = 7 

     quarter = value * 100;   // 47,63 * 100 = 4736 
     int sum = (int) quarter % 100; // 4763/100 => 4763-4700 = 63. 

     System.out.println(amount); 
     System.out.println(amount2); 
    } 
} 

ответ

3

Чтобы получить результат за 10 долларовых банкнот вы деленная на 10.

Теперь подумайте о том, как вы можете использовать 7/5 и 7 % 5.

Я бы также посоветовал вам не использовать для этого два раза, потому что ошибки представления могут дать неверный результат. Было бы лучше выполнить этот расчет в центах и ​​использовать только целочисленную арифметику. Ввод «47,63» можно рассматривать как 4763 цента, а десятидолларовая купюра - 1000 центов.

+2

ok um. поэтому 7/5 должны дать мне один долларовый счет, а 7% 5 должны дать мне остаток, чтобы получить 7 долларов, так как я взял 5 долларов из него, то есть 2. Правильно? :) – Racket

+0

@Racket: Это правильно. –

1

Во-первых, вы не должны выполнять вычисления с числами с плавающей запятой, если это возможно. Есть много сложных деталей.

Для этого вопроса лучше читать денежное значение как двойное, а затем конвертировать его в центы как можно быстрее.

double monetaryValue = scanner.nextDouble(); 
int cents = (int) (monetaryValue * 100.0 + 0.5); 

int remaining = cents; 
int tenDollars = remaining/1000; 
remaining %= 1000; 
int fiveDollars = remaining/500; 
// TODO: continue calculation with remaining ... 

Я уверен, что вы поймете, как продолжить.

+0

Книга еще не объяснила, пока циклы, класс Math и т. Д. Я должен буду придерживаться того, что находится в Chap 1 :) – Racket

+0

Да, я это заметил и исправил код. Теперь это проще, быстрее и легче понять. Ну, кроме класса Math. Надеюсь, в этой книге вам не нужно делать арифметику с плавающей запятой, потому что это довольно сложно. –

+0

Роланд, почему вы добавили 0,5? – Racket

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