А давайте зададимся вопросом: зачем люди идут в ВУЗы?
Помните простую фразу: не будешь хорошо учиться – пойдешь дворником работать. Можно даже подумать, что все, кто идут учиться, – не хотят работать дворниками? А чего же тогда они хотят? Они хотят полную противоположность работе дворника.
Люди идут учиться в ВУЗ, чтобы иметь высокооплачиваемую, высококвалифицированную работу! Чтобы была возможность купить дом, машину. Иметь все, хоть и не всегда (одно из определений среднего класса).
Люди думают, что учеба в ВУЗе дает высокооплачиваемую, высококвалифицированную работу. Она не дает. Но ВУЗ про это молчит, а мы продолжаем верить, что «вот выучимся – получим отличную работу». 5 лет в среднем ВУЗе не приблизят вас к вашей «хорошей работе» ни на сантиметр. Потому, что:
1. Преподаватели в большинстве ВУЗов не могут научить вас быть профессионалом, ведь они сами мало что умеют.
Честно ответьте себе на вопрос: почему те, кто вас учат, работают в ВУЗах на своих небольших зарплатах? Потому, что они не могут претендовать на квалифицированные должности на рынке труда. Им не хватает ни опыта, ни квалификации. Кому хватает — те уходят. В лучших ВУЗах мира другая ситуация, но сейчас разговор не про них.
Как думаете, успешный финансист пойдет работать топ-менеджером в банк на зарплату в $3,000 в месяц или доцентом в ВУЗ на зарплату в $300 в месяц? Чаще всего в ВУЗах преподают профессионалы-неудачники, которые не смогли найти себе работу вне ВУЗа. Исключения есть, но их очень и очень мало.
Сразу оговорюсь, что есть в ВУЗах и хорошие преподаватели, и очень хорошие. Но их даже не меньшинство, их – единицы. Хороший преподаватель должен не только доступно и понятно преподавать свой предмет, но и сделать упор на практическую применимость этих знаний. Большинству преподавателей нет дела до актуальности их знаний.
2. Преподаватели средних ВУЗов превозносят науку и презирают профессиональную реализацию.
Корни этого следует искать в том, что все преподаватели не состоялись как профессионалы. И единственный способ найти себе оправдание – это то, что профессиональная реализация – это недостойное занятие. Если вы не ходите на лекции, потому что ездите на научные конференции, то вы – молодец. А если вы много пропускаете, потому что работаете – к этому совершенно другое отношение.
Преподаватели - как монахи-затворники. Профессия – это все суета сует. Вот мы посвятили себя служению богу науке, и целый день читаем молитвы пишем научные статьи. Цель может и благородная, но абсолютно бесполезная в реальной жизни.
3. Ошибочный эталон для сравнения.
Очень часто студенты сравнивают себя со школьниками и гордятся тем, что знают гораздо больше. Эта иллюзия продолжается, пока человек не задумается о работе, и не обратит свой взор в другую сторону. Ведь если бы студенты сравнили себя с людьми, уже работающими в их будущей профессии, тогда бы увидели, что приближаются к цели миллиметровыми шагами.
Не надо в ВУЗе равняться на всех. Потому что если делать «как все», то и результат будет «как у всех». В группе большинство студентов — случайные люди, у которых нет больших перспектив. Может их запихнули в институт родители, они слабо представляют себе будущую профессию, всякое бывает.
Не нужно себя сравнивать с сокурсниками. Лучшим критерием ваших знаний и успехов будут ваши сделанные проекты, ваши успехи на работе. Соотносите себя не с «серой массой», а с рынком.
4. Профессиональное обучение составляет лишь маленькую часть того, что преподают в ВУЗе.
Когда вы придете на работу, вас спросят о том, что вы уже умеете делать, а не чему вас учили. Вашего начальника будет интересовать, что вы знаете и умеете из того, что необходимо на должности, на которую вы претендуете. Почти как в ВУЗе: вам ставят вполне конкретную задачу, но не объясняют, как ее делать, и ждут результата в конкретные сроки. Удачи!
Если вам читают в ВУЗе историю, а работать вы будете оператором в банке – это приближает вас к цели или удаляет от нее? Формально вы знаете больше. Значит – приближает? Но фактически, с каждым семестром, у вас остается все меньше и меньше времени, чтобы получить ценные профессиональные знания, а их объем остается прежним. Т.е. реально – отдаляет.
5. У ВУЗа нет цели «сделать из вас высококлассного профессионала».
Очень сложно попасть в цель, когда ты в нее не целишься. Вас превращают во всесторонне развитого специалиста. Особенно это характерно для Европы. Такое «второе общее среднее образование». Забыв только упомянуть, что человек, который учит все – не знает толком ничего.
Помните три цели ВУЗа: наука, общее образование и профессиональное образование? Как думаете, что пришлось сократить, чтобы добавить науку и общее образование? Правильно: профессиональные дисциплины. И вы все еще думаете, что цель ВУЗа – сделать из вас профессионала?
6. Если человек учит больше двух предметов одновременно, он зря тратит свое время.
После школы это утверждение кажется ошибочным. Но на работе понимаешь, как оно справедливо. В школе уроки такие короткие, не потому что это эффективно, а потому что школьник – еще ребенок, и он просто не способен концентрироваться больше часа. Но частые переключения задач мешают мозгу эффективно думать. А на работе с вас будут требовать, как со взрослого, и тут частые переключения между задачами начнут сильно снижать вашу эффективность.
Почему, вы думаете, вы так быстро готовитесь к экзаменам? Вы просто не переключаетесь на другие задачи. Отсюда и резко возросшая эффективность. Учеба маленькими кусочками – это откровенная глупость. Представьте, что вы сидите на диете всего 6 часов в неделю, и как скоро вам придется ждать результата?
7. В вузе человек только поверхностно знакомится с предметами.
Допустим, вы что-то учите два семестра. У вас две лекции и две практики в неделю. Серьезный подход по меркам универа. А сколько же это будет часов? 4 пары по 2 академических часа (1.5 обычных) – это 6 часов в неделю.
В первом семестре мы учимся 4 месяца: сентябрь, октябрь, ноябрь, декабрь. Во втором еще 4: февраль, март, апрель, май. Итого: 8 месяцев по 4.5 недели в каждом и 6 часов в неделю. 216 часов в год.
Да будет вам известно, дорогие мои студенты, что в месяце 180 рабочих часов и любой ваш годовой курс можно усвоить всего за 1.5 месяца, а при желании (или необходимости) всего за месяц.
8. Вам преподают самые общие, малополезные и устаревшие знания.
Каждое знание имеет разную ценность в зависимости от проблемы, которую вам предстоит решить. Если вы тонете, то умение плавать гораздо полезнее курса философии, не так ли? А если устраиваетесь на работу кассиром, то умение считать важнее знания семи иностранных языков на базовом уровне.
Самые полезные навыки для вашей профессиональной реализации – это, безусловно, практический опыт и знание последних достижений в вашей профессии. Преподаватель среднего ВУЗа – чаще всего никогда не имел реального опыта в вашей будущей профессии и не знаком с последними достижениями. А если где-то про них и прочитал, то понятия не имеет об их ценности, как и когда их применять.
Даже если вы выучите 100 ненужных предметов, они не заменят 10 необходимых.
9. Практические навыки в 10 раз ценнее теоретических знаний.
В жизни и на работе нам часто приходится что-то ДЕЛАТЬ. Если вы знаете, как делать, или думаете, что знаете, это еще не значит, что вы можете это сделать. Вы знаете, что курить вредно, и смогли бросить курить? Вы знаете, что заниматься спортом правильно, и можете каждый день им заниматься? Вы знаете, что иностранные языки полезны для карьеры и, конечно, смогли выучить парочку?
Значение в жизни имеет только практика. Чем больше у вас знаний в ущерб навыкам, тем меньше от них толку. Как же вы поймете, что какие-то знания неверны, устарели, вы применяете их не к месту, а какие-то и вовсе не работают в реальном мире? Вы никогда не думали об этом? Добро пожаловать в реальный мир.
Вы можете выучить правила дорожного движения на «хорошо» и «отлично», но ездить вы все равно не сможете. Теория – это хорошее подспорье для практики. Представьте, что вы строите стену: кирпичи – это практика, а раствор – это теория. Без раствора (теории) стена будет неустойчивой, но без кирпичей (практики) от вашей теории вообще нет никакого толку.
Так что, господа, разделите ваши 5 лет в вузе на 10! Полгода – вот истинный результат ваших многолетних «усилий». Хотите доказательств? Когда вы устроитесь на работу, и проработайте полгодика, вы поймете, что ваши ВУЗовские знания – удвоились.
Любишь программирование – купи подписку, поддержи JavaRush. Все собранные деньги идут на развитие проекта, на написание лекций и задач, на аренду сервера и поддержание сайта.
Уже написано 600+ мини-лекций, в которых интересно преподносятся новые темы, даны примеры, таблицы, графики и картинки.
Мы сделали 1000+ задач и несколько автоматических тестов для каждой них. Благодаря этому вы не ждете по полчаса анализа своих решений, а задачи проверяются практически мгновенно. Мы боремся, чтобы проверка задач занимала меньше секунды, чтобы экономить ваше время. Чтобы вам было удобно, приятно и комфортно заниматься.
Недавно мы добавили автоматические подсказки для первых уровней. Сервер отлавливает самые распространенные ошибки и дает рекомендации по их исправлению. Мы отлавливаем опечатки, неверный порядок параметров, перепутанные минимум и максимум, и еще два десятка самых распространённых ошибок.
Я и мои друзья стараемся создать очень эффективный обучающий сервис. Поддержите нас, и тысячи людей, которые любят программирование так же, как и вы, смогут получить опыт и устроиться на интересную для них работу.
Чем больше программистов – тем лучше. Много крутых программистов – это много сложных, дорогих и интересных проектов. Мы вместе создаем наше будущее.
- Привет, Амиго!
- Привет, Элли!
- Сегодня у меня хорошее настроение, поэтому расскажу тебе кое-что интересное. И начну я с типизации примитивных типов в Java.
- В Java у каждого объекта и у каждой переменной есть свой жёстко заданный неизменяемый тип. Тип переменной определяется ещё в процессе компиляции программы, тип объекта – при его создании. Тип нового созданного объекта и/или переменной остаются неизменными все их время жизни. Пример:
Код | Описание |
---|---|
int a = 11; int b = 5; int c = a / b; // c == 2 |
a / b – это деление нацело. Ответом будет два. Остаток от деления просто отбрасывается. |
int a = 13; int b = 5; int d = a % b; // d == 3 |
В d будет храниться остаток от деления a на b нацело. Остаток равен 3. |
- Но есть и пара интересных нюансов, которые следует помнить.
- Во-первых, ссылочная переменная не всегда хранит значение такого же типа, как и она.
- Во-вторых, при взаимодействии переменных двух разных типов, они должны быть сначала преобразованы к одному общему типу.
- А как же деление? Если разделить 1 на 3, мы получим 0.333(3). Ведь так?
- Нет не так. При делении двух целых чисел, результатом тоже будет целое число. Если разделить 5 на 3, то ответом будет 1 и два в остатке. Остаток при этом отбрасывается.
- Если разделить 1 на 3, то мы получим 0 (и единицу в остатке, который отбросится).
- А что делать, если я все же хочу получить 0.333 ?
- В Java числа перед делением лучше всего приводить к вещественному (дробному) типу путем умножения их на вещественную единицу – 1.0
Код | Описание |
---|---|
int a = 1/3; | a будет содержать 0 |
double d = 1/3; | d будет содержать 0.0 |
double d = 1.0 / 3; | d будет содержать 0.333(3) |
double d = 1 / 3.0; | d будет содержать 0.333(3) |
int a=5, b=7; double d = (a*1.0) / b; |
d будет содержать 0.7142857142857143 |
- Понятно.
- Привет, Амиго!
- Привет, Риша!
- Ты уже изучил основы синтаксиса Java, поэтому я хочу рассказать тебе некоторые вещи более углубленно.
- Сегодня я расскажу тебе немного про примитивные типы, а также - сколько памяти они занимают. Тебе это пригодится и, возможно, даже сегодня. Вот эти типы:
Тип | Размер, байт |
Диапазон значений | Значение по умолчанию | Описание |
---|---|---|---|---|
byte | 1 | -128 .. 127 | 0 | Самое маленькое целое - один байт |
short | 2 | -32,768 .. 32,767 | 0 | Короткое целое, два байта |
int | 4 | - 2*109 .. 2*109 | 0 | Целое число, 4 байта |
long | 8 | - 9*1018 .. 9*1018 | 0L | Длинное целое, 8 байт |
float | 4 | -10127 .. 10127 | 0.0f | Дробное, 4 байта |
double | 8 | -101023 .. 101023 | 0.0d | Дробное, двойной длины, 8 байт |
boolean | 1 | true, false | false | Логический тип (только true & false) |
char | 2 | 0..65,535 | '\u0000 ' | Символы, 2 байта, все больше 0 |
Object | 4 | Любая ссылка или null. | null | Хранит ссылки на объекты типа Object или классов наследников |
- Давай я остановлюсь на каждом типе подробнее.
- Тип byte – это самый маленький тип целых чисел. Каждая переменная этого типа занимает всего один байт памяти, поэтому он может хранить значения в диапазоне от -128 до 127.
- А зачем такой маленький тип нужен. Почему нельзя везде использовать int?
- Можно. Но если ты создаешь очень большие массивы, и тебе не нужно хранить там значения больше 100, то почему бы не воспользоваться таким типом. Так ведь?
- Тип short – ровно в два раза длиннее типа byte и тоже хранит только целые числа. Самое большое число, которое в него вмещается – это 32767. Самое большое отрицательное число – это -32768.
- Тип int ты уже знаешь. Он может хранить целые числа до двух миллиардов, как положительные, так и отрицательные.
- Тип float – создан для хранения вещественных (дробных) чисел. Его размер 4 байта.
- Все дробные числа хранятся в памяти в очень интересной форме.
- Например, число 987654.321 можно представить как 0.987654321*106. Поэтому в памяти оно будет представлено как два числа «0.987654321» (мантиса - значащая часть числа) и «6» (экспонента - степень десятки)
- А зачем так сделано?
- Такой подход позволяет хранить гораздо большие числа, чем int, используя всего 4 байта. Но при этом мы жертвуем точностью. Часть памяти расходуется на хранение мантиссы, поэтому такие числа хранят всего 6-7 знаков после запятой, остальные отбрасываются.
-Такие числа еще называют «числа с плавающей запятой» или «числа с плавающей точкой (floating point number)» . Отсюда, кстати, и название типа – float.
- Ясно.
- Тип double – это такой же тип, как и float, только в два раза длиннее – он занимает восемь байт. (double – двойной, по-английски). И предельный размер мантиссы и количество значащих цифр в нем больше. Если тебе нужно хранить вещественные числа – старайся использовать именно этот тип.
- Тип char – гибридный тип. Его значения можно интерпретировать и как числа (их можно складывать и умножать) и как символы. Так было сделано потому, что хоть символы и имеют визуальное представление, для компьютера они в первую очередь просто числа. И работать с ними как с числами гораздо удобнее. Тут еще есть одно замечание: тип char строго положительный – отрицательных значений он хранить не может.
- Тип boolean –логический тип и может хранить всего два значения: true(истина) и false(лож).
- Тип Object, хоть и представлен в таблице, примитивным типом не является. Это базовый класс для всех классов в Java. Во-первых, все классы считаются унаследованными от него, а значит, содержат его методы. А во-вторых, ему можно присваивать ссылки на объекты любого типа. В том числе и null – пустую ссылку.
- Узнал очень много нового. Спасибо за урок, Риша.
- А теперь самое интересное. Я расскажу тебе про преобразование типов. Хоть типы переменных всегда неизменны, есть место, где можно проводить преобразование типов. И место это – присваивание.
- Можно присваивать друг другу переменные разных типов. При этом значение, взятое из переменной одного типа, будет преобразовано в значение другого типа и присвоено второй переменной.
- В связи с этим, можно выделить два вида преобразования типов: расширение и сужение. Расширение похоже на перекладывание из маленькой корзинки в большую – операция проходит незаметно и безболезненно. Сужение типа – это перекладывание из большой корзинки в маленькую: места может не хватить, и что-то придётся выбросить.
-Вот типы, отсортированные по размеру «корзинки»:
- Тут есть пара замечаний:
1 char такая же корзинка, как и short, но свободно перекладывать из одной в другую нельзя: при перекладывании значения из short в char, всегда будут теряться значения меньше 0. При перекладывании из char в short будут теряться значения больше 32-х тысяч.
2 При преобразовании из целых чисел в дробные, могут отбрасываться самые младшие части числа. Но т.к. смысл дробного числа в том, чтобы хранить приблизительное значение, то такое присваивание разрешается.
- При сужении типа мы должны явно показать компилятору, что мы не ошиблись и отбрасывание части числа сделано намеренно. Для этого используется оператор приведения типа. Это имя типа в круглых скобочках.
- Вот как нужно присваивать переменные разных типов:
Код | Описание | |
---|---|---|
byte a = 115; int b = a; |
Расширение типа. Все отлично. | |
int c = 10000; byte d = (byte) c; |
Сужение типа. Нужно явно отбросить лишние байты. | |
int c = 10; byte d = (byte) c; |
Сужение типа. Нужно явно отбросить лишние байты, даже если они равны 0. | |
float f = 10000; long l = (long) (f * f); float f2 = l; long l2 = (long) f2; |
При присваивании к float, происходит расширение типа. При присваивании значения float к long, происходит сужение – необходимо приведение типа. | |
double d = 1; float f = (float) d; long l = (long) f; int i = (int) l; short s = (short) i; byte b = (byte) s; |
Сужение во всех операция присваивания, кроме первой строки, требует указания явного преобразования типа. |
- Оператор приведения типа нужно указывать перед числом/переменной каждый раз, когда происходит отбрасывание части числа или сужение типа. Он действует только на число/переменную, которое идет непосредственно за ним.
Код | Описание |
---|---|
float f = 10000; long l = (long) f * f; |
К типу long приводится только одна переменная из двух: умножение long и float дает float. |
float f = 10000; long l = (long) (f * f); |
Тут все выражение приводится к типу long. |
- Ясно.
- Привет, Амиго! Вот тебе задачи на преобразование целых типов. Расставь где нужно оператор приведения типа:
Задачи |
---|
1. Задача №1 на преобразование целых типов Расставьте правильно операторы приведения типа, чтобы получился ответ: d > 0 int a = 0; int b = (byte) a + 46; byte c = (byte) (a*b); double f = (char) 1234.15; long d = (short) (a + f / c + b); |
2. Задача №2 на преобразование целых типов Расставьте правильно операторы приведения типа, чтобы получился ответ: d = 3.765 int a = 15; int b = 4; float c = a / b; double d = a * 1e-3 + c; |
3. Задача №3 на преобразование целых типов Добавить одну операцию по преобразованию типа, чтобы получался ответ: b = 0 float f = (float)128.50; int i = (int)f; int b = (int)(i + f); |
4. Задача №4 на преобразование целых типов Добавить одну операцию по преобразованию типа, чтобы получался ответ: nine = 9 short number = 9; char zero = '0'; int nine = (zero + number); |
5. Задача №5 на преобразование целых типов Расставьте правильно операторы приведения типа, чтобы получился ответ: c = 256 int a = (byte)44; int b = (byte)300; short c = (byte)(b - a); |
- Сейчас будет меленькая, но интересная тема – преобразование к типу String.
- В Java к типу String можно преобразовать любые типы данных.
- Звучит заманчиво.
- На самом деле все еще лучше. Практически все типы можно приводить к типу String неявно. Лучше всего это заметно, когда мы складываем две переменных: String и «не String». При этом «не String» переменная преобразовывается к типу String.
- Вот посмотри пару примеров:
Команда | Что происходит на самом деле |
---|---|
int x = 5; String text = "X=" + x; |
int x = 5; String s = "X=" + Integer.toString(x); |
Cat cat = new Cat("Vaska"); String text = "My cat is " + cat; |
Cat cat = new Cat("Vaska"); String text = "Vaska" + cat.toString(); |
Object o = null; String text = "Object is " + o; |
Object o = null; String text = "Object is " + "null"; |
String text = 5 + '\u0000' + "Log"; |
int i2 = 5 + (int) '\u0000'; String text = Integer.toString(i2) + "Log"; |
String text = "Object is " + (float) 2 / 3; |
float f2 = ((float) 2) / 3;
String text="Object is "+Float.toString(f2); |
Вывод: Если мы складываем String и «любой другой тип», то второй объект преобразуется к типу String.
- Обрати еще внимание на четвертую строку таблицы. Все операции выполняются слева направо, поэтому сложение 5 + '\u0000' происходит как сложение целых чисел.
- Т.е. если я напишу, код типа: String s = 1+2+3+4+5+"m", то получу s = "15m" ?
- Ага. Сначала произойдет сложение чисел, а затем – преобразование их к строке.
- А теперь небольшой урок от Диего. Кратко и по существу о преобразовании ссылочных типов.
- Начнем мы пока только с переменной типа Object. Этой переменной можно присвоить ссылку любого типа (расширение типа). Но чтобы выполнить обратное присваивание (сужение типа) приходится явно указывать операцию приведения:
Код | Описание |
---|---|
String s = "mama"; Object o = s; // o хранит String |
Типичное расширение ссылочного типа |
Object o = "mama";// o хранит String String s2 = (String) o; |
Типичное сужение ссылочного типа. |
Integer i = 123; //o хранит Integer Object o = i; |
Расширение типа. |
Object o = 123; //o хранит Integer String s2 = (String) o; |
Ошибка во время исполнения! Невозможно привести ссылку на число к ссылке на строку. |
Object o = 123; //o хранит Integer Float s2 = (Float) o; |
Ошибка во время исполнения! Невозможно привести ссылку на целое число к ссылке на дробное число. |
Object o = 123f; // o хранит Float Float s2 = (Float) o; |
Приведение к своему типу. Операция сужения ссылочного типа. |
- При расширении или сужении ссылочных типов никакого изменения объекта не происходит. Сужающим (или расширяющим) является именно операция присваивания, при которой либо выполняется «проверка соответствия типов переменной и ее нового значения» либо нет.
- Тот редкий пример, когда все ясно и понятно.
- Чтобы не было ошибок, как в примерах, есть способ узнать, какой именно тип сохранили в переменную типа Object:
Код | |
---|---|
int i = 5; float f = 444.23f; String s = "17"; Object o = f; //o хранит объект типа Float if (o instanceof Integer) { Integer i2 = (Integer) o; } else if (o instanceof Float) { Float f2 = (Float) o; //отработает именно этот if } else if (o instanceof String) { String s2 = (String) o; } |
- Желательно выполнять такую проверку, перед каждым сужением типа, если тип сохраненного объекта на 100% не известен.
- Понятно.
- Вот тебе пару интересных вещей про вещественные (они же дробные) типы. Начнём вот с этого примера:
float f = 3 / 5; |
---|
В результате данного вычисления значение f будет равно… нулю!
- Мне Риша что-то подобное рассказывал…
- Да? Вот и отлично. Повторение – мать учения.
- На самом деле тут нет никакой ошибки. В делении участвуют два целых числа, поэтому происходит деление нацело, остаток от деления просто отбрасывается. Чтобы такого не было, нужно, чтобы хотя бы одно из двух чисел, участвующих в делении, было дробным.
- Если одно из чисел дробное, то сначала второе число будет преобразовано к дробному типу, а затем будет выполнено деление.
- Вот как можно решить данную проблему:
Запись дробного числа: |
---|
float f = 3.0f / 5.0f; |
float f = 3.0f / 5; |
float f = 3 / 5.0f; |
- А если в делении участвуют переменные?
- Тогда – вот так:
Преобразование целой переменной в вещественную |
---|
int a = 3, b = 5; float f = (a * 1.0f) / b; |
int a = 3, b = 5; float f = a / (b * 1.0f); |
int a = 3, b = 5; float f = (a*1.0) / (b*1.0); |
int a = 3, b = 5; float f = (float) a / b; |
- Не очень красиво. А что, нет какой-нибудь более удобной операции деления?
- Нет. Это все, что есть.
- Ну, ок, думаю, проблем не будет.
- И, наконец, урок от Риши в лекторском стиле: куча бесполезной информации. Все лекторы обожают такое. Но ты хотя бы одним глазком посмотри, и хватит с тебя.
- Я – готов.
- Сегодня я расскажу тебе, что такое литералы. Литералы - это все данные, которые записаны прямо в Java-коде. Примеры:
Код | Описание |
---|---|
"Mama mila ramu" | Это литерал. Его тип - String |
115 | Это литерал. Его тип - int |
0.256 | Это литерал. Его тип – float |
'\u1234' | Это литерал. Его тип – char |
- На самом деле литералов несколько больше. С помощью литералов можно задать значения любых известных типов:
Литерал | Тип | Описание |
---|---|---|
123676 | int | Целое число |
22223333444433332222L | long | Длинное целое число |
12.323232323f | float | Дробное число |
12.33333333333333333d | double | Длинное дробное число |
"Mama" "" "Mama\nMila\nRamu\u123" |
String | Строка |
'\u3232' 'T' '5' |
char | Символ |
true, false | boolean | Логически тип |
null | Object | Ссылка на объект |
- Т.е. код – это методы, классы, переменные,…, а литералы – это конкретные значения переменных, записанные прямо в коде. Так, я правильно понял?
- Да, так и есть.
- Отлично. Наконец-то эта Java начинает складываться в одну картину.
- Супер. Наконец-то моя любимая тема - преобразования типов. Помню, ещё мой профессор когда-то “увлекательно” рассказывал мне о них. Я тогда ничего не понял. Но ты, благодаря этим замечательным лекциям, конечно же, всё поймёшь. Вот они:
- Вау! Ну, ты нереально крут, Амиго! Столько всего выучил всего за две недели!! Ну ты и монстр. Кстати, как насчёт развлекона после двух недель рабского труда?
- Здорово, боец!
- Здравия желаю, капитан Бобров!
- У меня для тебя шикарная новость. Вот тебе задания для закрепления полученных навыков. Выполняй их каждый день, и твои навыки будут расти с неимоверной скоростью. Они специально разработаны для выполнения их в Intellij IDEA.
Дополнительные задания для выполнения в Intellij Idea |
---|
1. Правильный ответ: d=2.941 Добавить одну операцию по преобразованию типа, чтобы получался ответ: d=2.941 |
2. Правильный ответ: d=5.5 Добавить одну операцию по преобразованию типа, чтобы получался ответ: d=5.5 |
3. Правильный ответ: d=1.0 Добавить одну операцию по преобразованию типа, чтобы получался ответ: d=1.0 |
4. Большая зарплата Вывести на экран надпись «Я не хочу изучать Java, я хочу большую зарплату» 40 раз по образцу. Образец: Я не хочу изучать Java, я хочу большую зарплату не хочу изучать Java, я хочу большую зарплату не хочу изучать Java, я хочу большую зарплату е хочу изучать Java, я хочу большую зарплату хочу изучать Java, я хочу большую зарплату хочу изучать Java, я хочу большую зарплату … |
5. Количество букв Ввести с клавиатуры 10 строчек и подсчитать в них количество различных букв (для 33 букв алфавита). Вывести результат на экран. Пример вывода: а 5 б 8 в 3 г 7 … я 9 |
6. Конструкторы класса Human Напиши класс Human с 6 полями. Придумай и реализуй 10 различных конструкторов для него. Каждый конструктор должен иметь смысл. |
7. Расставьте минимум static-ов Расставьте как можно меньше модификаторов static так, чтобы пример скомпилировался. |
8. Массив списков строк Создать массив, элементами которого будут списки строк. Заполнить массив любыми данными и вывести их на экран. |
9. Одинаковые слова в списке Ввести с клавиатуры в список 20 слов. Нужно подсчитать количество одинаковых слов в списке. Результат нужно представить в виде словаря Map<String, Integer>, где первый параметр – уникальная строка, а второй – число, сколько раз данная строка встречалась в списке. Вывести содержимое словаря на экран. В тестах регистр (большая/маленькая буква) не влияет на результат. |
10. Безопасное извлечение из списка Создать список целых чисел. Ввести с клавиатуры 20 целых чисел. Создать метод по безопасному извлечению чисел из списка: int safeGetElement(ArrayList<Integer> list, int index, int defaultValue) Метод должен возвращать элемент списка (list) по его индексу (index). Если в процессе получения элемента возникло исключение, его нужно перехватить, и метод должен вернуть defaultValue. |
- Те задания были для духов. Для дедушек я добавил бонусные задания повышенной сложности. Только для старослужащих.
1. Нужно исправить программу, чтобы компилировалась и работала. Задача: Программа демонстрирует работу HashMap: вводит с клавиатуры набор пар (номер и строку), помещает их в HashMap и выводит на экран содержимое HashMap. |
2. Нужно добавить в программу новую функциональность. Задача: Программа вводит с клавиатуры пару (число и строку) и выводит их на экран. Новая задача: Программа вводит с клавиатуры пары (число и строку), сохраняет их в HashMap. Пустая строка – конец ввода данных. Числа могу повторяться. Строки всегда уникальны. Введенные данные не должны потеряться! Затем программа выводит содержание HashMap на экран Пример ввода: 1 Мама 2 Рама Пример вывода: 1 Мама 2 Рама |
3. Задача по алгоритмам. Задача: Ввести с клавиатуры 30 чисел. Вывести 10-е и 11-е минимальные числа. Пояснение: Самое минимальное число – 1-е минимальное. Следующее минимальное после него – 2-е минимальное Пример: 1 6 5 7 1 15 63 88 Первое минимальное – 1 Второе минимальное – 1 Третье минимальное – 5 Четвертое минимальное – 6 |