Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
-4 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 70

Работа с абстрактными классами

08.02.2016, 22:01. Показов 3009. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать абстрактный класс Currency (валюта) для работы с денежными суммами. Определить абстрактными методы перевода в рубли и вывода на экран. Реализовать производные классы Dollar (доллар) и Euro (евро) с собственными методами перевода и вывода на экран.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2016, 22:01
Ответы с готовыми решениями:

Работа с классами
Давно делал программы с множеством классов, но вот нашол проблему.. Объясните где ошибка... public class Test { public static void...

Работа с классами
Работа с классами Создать классы, спецификации которых приведены ниже. определить кон- структоры и методы setТип () getТип ()...

Работа с Классами
Реализовать класс Bankomat, моделирующий работу банкомата. В классе должны содержаться поля для хранения идентификационного номера...

13
8 / 8 / 4
Регистрация: 07.02.2016
Сообщений: 26
09.02.2016, 00:36
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.util.Scanner;
 
 
public abstract class Currency {
    static final double RUB = 1;
    static final double USD = 77;
    static final double EUR = 85;
    abstract void conwersion(int amount);
}
class Rub extends Currency{
    @Override
    void conwersion(int amount) {
        System.out.println(String.format("%d RUB %.4f USD",amount,(RUB/USD) * amount));
        System.out.println(String.format("%d RUB %.4f EURO",amount,(RUB/EUR) * amount));
    }
}
class Usd extends Currency{
    @Override
    void conwersion(int amount) {
        System.out.println(String.format("%d USD %.4f RUB",amount,(USD/RUB) * amount));
        System.out.println(String.format("%d USD %.4f EUR",amount,(USD/EUR) * amount));
    }
}
class Euro extends Currency{
    @Override
    void conwersion(int amount) {
        System.out.println(String.format("%d EURO %.4f RUB",amount,(EUR/RUB) * amount));
        System.out.println(String.format("%d EURO %.4f USD",amount,(EUR/USD) * amount));
 
    }
}
class Cassa {
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
        Rub rub = new Rub();
        Usd usd = new Usd();
        Euro euro = new Euro();
 
        System.out.println("Валюта: ru, us, eu?");
        String val = sc.nextLine();
        System.out.println("Кол-во: ");
        int amount = sc.nextInt();
        switch (val) {
            case "ru":
                rub.conwersion(amount);
                break;
            case "us":
                usd.conwersion(amount);
                break;
            case "eu":
                euro.conwersion(amount);
                break;
            default:
                break;
        }
    }
}
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.02.2016, 07:46
Maximkaa, на троечку с минусом решение, но поскольку ТС не приложил никаких усилий чтобы самостоятельно решить задачу, ему больше и не полагается)
1
8 / 8 / 4
Регистрация: 07.02.2016
Сообщений: 26
09.02.2016, 09:20
KEKCoGEN, Я ведь только учусь , покритикуйте
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.02.2016, 09:26
Maximkaa, вы сделали то чего в задании не просили и не сделали то, что просили. Перечитайте внимательно задание.
0
8 / 8 / 4
Регистрация: 07.02.2016
Сообщений: 26
09.02.2016, 11:36
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.Scanner;
 
 
public abstract class Currency {
    static final double RUB = 1.0;
    static final double USD = 77.5;
    static final double EUR = 84.5;
    abstract double conwersionRub(double amount);
    abstract void printResult(double result);
}
 
class Usd extends Currency{
 
    @Override
    double conwersionRub(double amount) {
        double result = 0;
        result = (USD/RUB) * amount;
        return result;
    }
 
    @Override
    void printResult(double result) {
        System.out.println(String.format("%.4f RUB",result));
    }
}
class Euro extends Currency{
 
    @Override
    double conwersionRub(double amount) {
        double result = 0;
        result = (EUR/RUB) * amount;
        return result;
    }
 
    @Override
    void printResult(double result) {
        System.out.println(String.format("%.2f RUB",result));
    }
}
class Cassa {
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
 
        Usd usd = new Usd();
        Euro euro = new Euro();
 
        System.out.println("Выберете валюту которую нужно перевести в RUB: us, eu?");
        String val = sc.nextLine();
        System.out.println("Кол-во: ");
        double amount = sc.nextDouble();
        
         if (val.equals("us")) {
            usd.printResult(usd.conwersionRub(amount));
        }else euro.printResult(euro.conwersionRub(amount));
    }
}
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.02.2016, 12:41
Maximkaa, эта версия уже лучше. Класс Currency не должен знать о курсах валют. Это функционал каждого класса валюты.
0
8 / 8 / 4
Регистрация: 07.02.2016
Сообщений: 26
09.02.2016, 13:07
Добавлено через 43 секунды
KEKCoGEN, В общем дело осталось за малым и я надеюсь автор разберется!
0
 Аватар для BARDAS
0 / 0 / 0
Регистрация: 02.02.2016
Сообщений: 11
20.02.2016, 21:15
А на паскаль сможете написать ответ на эту тему?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
20.02.2016, 21:31
BARDAS, в этом разделе не пишут на паскале.
1
32 / 32 / 22
Регистрация: 29.10.2015
Сообщений: 195
20.02.2016, 22:26
KEKCoGEN, мой код ещё оцените пожалуйста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
abstract class Currency {
    abstract double Change(double a);
    abstract void Out(double a);
}
 
class Dollar extends Currency {
    double rate = 75.46;
    public double Change(double a) {
        return a*rate;
    }
 
    public void Out(double a) {
        System.out.println(String.format(a + " долларов в рублях: %.2f", Change(a)));
    }
}
 
class Euro extends Currency {
    double rate = 83.64;
    public double Change(double a) {
        return a*rate;
    }
 
    public void Out(double a) {
        System.out.println(String.format(a + " евро в рублях: %.2f", Change(a)));
    }
}
 
public class Task {
    public static void main(String[] args) {
        Currency m = new Dollar();
        m.Out(5);
        m = new Euro();
        m.Out(10);
    }
}
0
 Аватар для FatNinja
82 / 82 / 32
Регистрация: 17.02.2016
Сообщений: 226
20.02.2016, 23:02
liptonus777, Джошуа Блох, Java. Эффективное программирование, Статья 48:

Нельзя использовать float и double для точных расчётов (денег).

Кликните здесь для просмотра всего текста
Типы float и double в первую очередь предназначены для научных и инженерных расчетов. Oни реализуют бинарную арифметику с плавающей точкой (binary f!oating-point arithmetic), которая была тщательно выстроена с тем, чтобы быстро получать правильное приближение для широкого диапазона значений. Однако эти типы не дают точного результата, и в ряде случаев их нельзя использовать. Типы float и double не подходят для денежных расчетов, поскольку с их помощью невозможно представить число 0.1 (или любую другую отрицательную степень числа десять).
Например, у вас в кармане лежит $1.03, и вы тратите 42 цента. Сколько денег у вас осталось? Приведем фрагмент наивной программы, которая пытается ответить на этот вопрос:
Java
1
Sуstеm.оut.рrintln(1.0З – .42);
Как ни печально, программа выводит 0.6100000000000001. И это не единственный случай. Предположим, что у вас в кармане есть доллар, и вы покупаете девять прокладок для крана по десять центов за каждую. Какую сдачу вы получите?
Java
1
System.out.println(1.009*.10);
Если верить этому фрагменту программы, то вы получите $0.09999999999999995. Может быть, проблему можно решить, округлив результаты перед печатью? К сожалению, это срабатывает не всегда. Например, у вас в кармане есть доллар, и вы видите полку, где выстроены в ряд вкусные конфеты за 10, 20, 30 центов и так далее вплоть до доллара. Вы покупаете по одной конфете каждого вида, начиная с той, что стоит 10 центов, и так далее, пока у вас еще есть возможность взять следующую конфету. Сколько конфет вы купите и сколько получите сдачи? Решим эту задачу следующим образом:
Java
1
2
3
4
5
6
7
8
// Ошибка: использование плавающей точки для денежных расчетов!
public static void main(String[] args) {
double funds = 1.00;
int itemsBought = 0;
for (double price = .10; funds >= price; price += .10) {
funds -= price;
itemsBought++; }
System.out.println(itemsBought + " items bought."); System.out.println("Change: $" + funds);   }
Запустив программу, вы выясните, что можете позволить себе .три конфеты и у вас останется еще $0.39999999999999999. Но это неправильный ответ! Правильный путь решения задачи заключается в применении для денежных расчетов типов BigDecimal, int или long. Представ м простое преобразование предыдущей программы, которое позволяет использовать тип BigDecimal вместо double:
Java
1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
  final BigDecimal TEN_CENTS = new BigDecimal(".10");
  int itemsBought = 0;
  BigDecimal funds = new BigDecimal("1.00");
  for (BigDecimal price = TEN_CENTS; funds.compareTo(price) >= 0; price = price.add(TEN_CENTS)) {
    itemsBought++;
    funds = funds.subtract(price);   
  }
  System.out.print1n(itemsBought + " items bought."); 
  System.out.print1n("Money left over: $" + funds);  
}
Запустив исправленную программу, вы обнаружите, что можете позволить себе четыре конфеты и у вас останется $0.00. Это верный ответ. Однако тип BigDecimal имеет два недостатка: он не столь удобен и медленнее, чем простой арифметический тип. Последнее можно считать несущественным, если вы решаете единственную маленькую задачу, а вот неудобство может раздражать.
Вместо BigDecimal можно использовать int или long (в зависимости от обрабатываемых величин) и самостоятельно отслеживать положение десятичной точки. В нашем при мере расчеты лучше производить не в долларах, а в центах. Продемонстрируем этот подход:
Java
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
  int itemsBought = 0;
  int funds = 100;
  for (int price = 10; funds >= price; price += 10) {
    itemsBought++;
    funds –= price;
  }
  System.out.println(itemsBought + " items bought.");
  System.out.println("Money left over: " + funds + " cents"); 
}
Подведем итоги. Для вычислений, требующих точного результата, не используйте типы float и double. Если вы хотите, чтобы система сама отслеживала положение десятичной точки, и вас не пугают неудобства, связанные с отказом от простого типа, используйте BigDecimal. Применение этого класса имеет еще то преимущество, что он дает вам полный контроль над округлением: для любой операции, завершающейся округлением, предоставляется на выбор восемь режимов округления. Это пригодится, если вы будете выполнять экономические расчеты с жестко заданным алгоритмом округления. Если для вас важна производительность, вас не пугает необходимость самостоятельно отслеживать положение десятичной точки, а обрабатываемые значения не слишком велики, используйте тип int или long. Если значения содержат не более девяти десятичных цифр, можете применить тип int. Если в значении не больше восемнадцати десятичных цифр, используйте тип long. Если же в значении более восемнадцати цифр, вам придется работать с BigDecimal.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
20.02.2016, 23:09
liptonus777, имена методов пишутся с маленькой буквы.
Обратите внимание что у вас один и тот же код в обоих методах Change. В контексте данного задания это не ошибка т.к просили сделать метод абстрактным, но на самом деле решение не самое удачное.

переменная rate должна быть приватной и если не планируется её динамическое задани, то константой.
0
32 / 32 / 22
Регистрация: 29.10.2015
Сообщений: 195
20.02.2016, 23:13
FatNinja, KEKCoGEN, Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.02.2016, 23:13
Помогаю со студенческими работами здесь

Работа с классами
Уважаемые профи помогите с решением задачи и подскажите,что ДЕЙСТВИТЕЛЬНО СТОИТ почитать по Java, чтобы в голове всё укладывалось по...

Работа с классами
Нужна помощь. Не могу понять в чем ошибка,так как еще новичек.Помогите пожалуйста. Вот ,что пишет компилятор: Exception in thread...

Работа с классами в Java
Здравствуйте, у меня возник такой вопрос, всегда делал так сказать любую программу без её разделения на классы, в универе задали задание:...

Работа между классами
Есть главный класс main.java, есть класс pampam.java, созданный отдельно путем "new"->"Java class"... Как можно вызвать из main,...

Работа с классами и объектами
Необходимо вывести на экран перечень стран, у которых: 1) площадь больше или равна введенному пользователем с клавиатуры значению; 2)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru