нужна помощь с некоторыми базовыми Java - PullRequest
2 голосов
/ 26 декабря 2010

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

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

  1. 4 десятидолларовых купюр
  2. 1 пятидолларовые банкноты
  3. 2 однодолларовых банкноты
  4. 2 квартала
  5. 1 цент
  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);
    }
}

Ответы [ 2 ]

3 голосов
/ 26 декабря 2010

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

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

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

1 голос
/ 26 декабря 2010

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

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

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 ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...