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

Generic class

13.11.2016, 05:59. Показов 1401. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи! Изучаю Дженерики в Java, но пока никак не могу понять, как же правильно применять эти знания на практике. Есть тренировочное задание, помогите его выполнить пожалуйста, и если можете, разжуйте мне его.
Звучит оно так "Написать шаблон метода <T extends Number> T max (T a, T b),
возвращающий наибольшее из значений параметров a и b. Вызвать
шаблон с разными типами параметров."

Добавлено через 5 часов 26 минут
Вот что написал за ночь, теперь стоит вопрос правильности кода, плюс ко всему прошу ответить по поводу последнего задания - "Вызвать шаблон с разными типами параметров", как это сделать?
Java
1
2
3
4
5
6
7
8
9
10
11
12
public static <T extends Number> int max (T a, T b)  {
        int n = a.intValue();
        int m = b.intValue();
        if(n > m) {
            return (int)n;
        } else {
            return (int)m;
        }
    }
    public static void main(String [] args) {
        System.out.println(max(-4,2));
    }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.11.2016, 05:59
Ответы с готовыми решениями:

Задача: реализовать наследование: interface Сотрудник - class Инженер - class Руководитель.
Помогите решить задачу и объяснить. В Eclipse. Реализовать наследование: interface Сотрудник - class Инженер - class Руководитель

Задача: реализовать наследование: interface Сотрудник - class Инженер - class Руководитель. В Eclipse.
Помогите решить задачу и объяснить. В Eclipse. Реализовать наследование: interface Сотрудник - class Инженер - class Руководитель

Что такое String.class, JButton.class?
Здравствуйте Бывают встречаю такие вещи: String.class, JButton.class. Обычно вижу это в качестве аргумента функции Что это значит?

8
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
13.11.2016, 08:49
Лучший ответ Сообщение было отмечено CobrStreps как решение

Решение

А почему метод возвращает int? Смысл в параметризации какой? А если вашему методу max передать значения, например 2.001d и 2. Что получится? Правильно, он вернет 2, но ведь 2.001 больше?
Смысл задания - показать, понимание понятия параметризации методов (женериков).
Могу предложить
Java
1
2
3
4
5
6
7
static <T extends Number> T max(T a, T b) {
    int compare = Double.compare(a.doubleValue(), b.doubleValue());
    if (compare == 0 || compare == 1) {
        return a;
    }
    return b;
}
В этом случае метод должен правильно отработать для всех типов, расширяющих Number.
По поводу
Цитата Сообщение от CobrStreps Посмотреть сообщение
Вызвать шаблон с разными типами параметров
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) {
    byte b1 = 3;
    byte b2 = 127;
    short s1 = 1246;
    short s2 = -188;
    int i1 = 3453;
    int i2 = 994;
    long l1 = 11111;
    long l2 = 22223;
    float f1 = 45.55f;
    float f2 = 67.003f;
    double d1 = 1.000003d;
    double d2 = 1.0990004d;
        
    System.out.println(max(b1,f2));
    System.out.println(max(s1,s2));
    System.out.println(max(i1,i2));
    System.out.println(max(l1,l2));
    System.out.println(max(f1,f2));
    System.out.println(max(d1,d2));
}
Так же рекомендую заметить прикольную особенность, если этому методу передать оба параметра с одинаковым примитивным типом (как например выше в примере 2 байта или 2 флоата), этот метод вернет боксовый тип.
1
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 22
13.11.2016, 12:26  [ТС]
Спасибо за ответ! Я не разбираюсь ещё в этом, лишь нашёл и скопировал пример из учебника Блинова, не совсем понимая написанного.
(прикрепил скрин).
В том примере мне, как 1 из неясных моментов сразу бросилась строчка
Java
1
long n = num.longValue();
, а именно "longValue();", а в вашем примере (за него отдельное спасибо!) неясна эта
Java
1
 int compare = Double.compare(a.doubleValue(), b.doubleValue());
Возможно, может как то можно исправить мой пример, при этом сильно его не изменяя?
Миниатюры
Generic class  
0
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
13.11.2016, 12:56
В приложенном скрине, описан пример преобразования любого числа в байт, пример не особо корректный, т.к. можно в него передать 0.99f и он вернет 0, это правильно или нет?
По поводу
Java
1
int compare = Double.compare(a.doubleValue(), b.doubleValue());
Тут просто меньше писанины, сравнение производится не примитивным < или >, а стандартным методом compare, который есть во всех стандартных числовых боксерах, есть даже у String.
Цитата Сообщение от CobrStreps Посмотреть сообщение
Возможно, может как то можно исправить мой пример, при этом сильно его не изменяя?
Ну можно так:
Java
1
2
3
4
5
6
7
8
9
public static <T extends Number> T max (T a, T b)  {
    double n = a.doubleValue();
    double m = b.doubleValue();
    if(n > m) {
        return a;
    } else {
        return b;
    }
}
1
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 22
13.11.2016, 16:59  [ТС]
Пока мне трудно ещё входить в такие конструкции, не знаю даже, как и дальше же тогда быть, раз сейчас так трудно, спасибо вам!) Последнее, что остаётся неясным, так это почему во второй строчке вашего последнего кода из всех типов выбран именно тип double? А что, если я захочу как то оперировать с символьными типами, например, узнать, какая буква стоит раньше?
Я видимо явно чего-то не понимаю. Что посоветуете по изучению Java? Просто я как раз решил в качестве первой книги выбрать Хорстманна, но я не знаю, много ли там практики. Хотелось бы как-нибудь последовательно читать книгу, не перепрыгивая через темы, и тут же закреплять полученное знание практикой. Что посоветуете?
0
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
14.11.2016, 05:26
Цитата Сообщение от CobrStreps Посмотреть сообщение
А что, если я захочу как то оперировать с символьными типами
Тогда T extends Number не вканает, т.к. char (или Character) не наследует Number.
А по поводу
Цитата Сообщение от CobrStreps Посмотреть сообщение
из всех типов выбран именно тип double
double имеет самую большую точность (8 байт) и из всех Number в виде double можно представить любое возможное (в доступных пределах) число.
Цитата Сообщение от CobrStreps Посмотреть сообщение
Что посоветуете по изучению Java
Первым делом, я бы посоветовал не использовать литературу, подобную той, что приложена на одном из ваших скринов, это чтиво максимум для растопки (если в бумажном виде).
1
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 22
14.11.2016, 10:54  [ТС]
Вот, теперь же, с вашего пояснения, действительно стало ясно!) А насчёт литературы, эта книга Блинова, она хоть и рекомендуема начинающим, но мне она не понравилась. Слишком умным языком там всё рассказывают, а для новичков это проблема. Лично я не готов ещё, так как значительно замедляется скорость изучения. Я решил попробовать начать читать Хорстманна, но вот мне бы ещё какой-нибдуь практикой материал как-нибудь бы закреплять, без этого нету толку.
Нашёл вот эту тему, но что выбрать, и вообще стоит ли оттуда что-то выбирать, не знаю.
Java FAQ: задачи
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
14.11.2016, 12:17
Я бы вот так сделал:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Main {
 
    public static <T extends Number & Comparable> T max(final T a, final T b) throws InvalidArgumentException {
        if ((a == null) || (b == null))
            throw new InvalidArgumentException(new String[]{"Arguments can not be null"});
 
        if (a.equals(b) || (a.compareTo(b) > 0))
            return a;
        else
            return b;
    }
 
    public static void main(String[] args) {
        try {
            System.out.println(max(2.0, 4.0));
            System.out.println(max(new BigInteger("10002010102010102923"), new BigInteger("929836789297319023")));
            System.out.println(max(14, 21));
        } catch (InvalidArgumentException e) {
            e.printStackTrace();
        }
    }
}
0
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 22
15.11.2016, 00:19  [ТС]
И всё же, ребят, как посоветуете изучать Java? Прочту я Хорстманна, и что останется в голове? Мне б практический материал какой-нибудь бы хороший, собранный в одном месте. Который бы не пришлось искать по разным закоулками интернета, как я это делаю сейчас.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.11.2016, 00:19
Помогаю со студенческими работами здесь

Ошибка: cannot find symbol symbol: class toString location: class java.util.Date
import java.util.Date; import java.lang.String; import java.io.*; public class Sword { public static void main(String args)...

Generic
не совсем понимаю,хотя прочитал о них не мало,помогите с задачей (a): Внедрить класс Date, который может управлять годами,...

Generic
Допустим, First extends Second. Есть конструктор в Third классе: public Third() Например, я могу сделать так: public Third(List&lt;?...

Generic-классы
Здравствуйте! Читаю о generic-ах, в качестве примера приводится класс Optional package chapt03; public class Optional &lt;T&gt; {...

Generic lists
Объясните, почему данный код не вызывает ошибку компиляции? List list = new ArrayList&lt;Double&gt;(); ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru