1 Лучшее – враг хорошего
Быть лучше – это значит быть лучше других, превосходить их и отличаться от них. Вы не можете делать то же, что и все, чтобы стать лучшим. Вам нужен свой путь.
Вы не можете быть лучшим во всем: пока вы изучаете все, кто-то специализируется на чем-то одном. Лучший способ стать лучшим - это выбрать одну очень узкую специальность и стать в ней специалистом мирового уровня.
Если вы занимаетесь в балете с пяти лет по 8 часов в день, всегда найдется тот, кто занимается с трех лет и по 10 часов в день. К пятнадцати годам его опыт будет превосходить ваш на 5000 часов. А ведь есть еще и гении, на каждый час которого вам нужно заниматься три. И лучшие в мире преподаватели, а вы, например, самоучка.
Единственный способ стать лучшим, не имея своего уникального пути – это работать больше всех, быть талантливым, иметь хороших преподавателей и богатых родителей. Хотя – это уже не совсем «как все», да?
Но даже самая быстрая и трудолюбивая в мире лошадь не обгонит автомобиль. Вам нужна своя стратегия, свой уникальный план, чтобы стать лучшим, не жертвуя при этом всем.
2 Лучшим стать непросто
Всегда найдется кто-то, кто начал раньше вас. У кого-то богатые родители, кто-то учился в самом лучшем в мире университете. Кого-то родители взяли к себе на работу. Ничего страшного. Бывает. Это называется – разные стартовые условия. Но таких людей – меньшинство, в мире полно людей, которые сами добились успеха, благодаря своему нестандартному мышлению, трудолюбию и способности постоянно учиться всему новому.
Жизнь напоминает игру в карты. Любой выиграет, если ему раздали одни козыри, профессионал выигрывает не зависимо от розданных карт. Он сводит их влияние к минимуму своим мастерством.
Никто не понимает этого так хорошо, как профессиональные спортсмены. У многих из них есть всего несколько лет, чтобы реализовать свой шанс и достичь успеха.
3 Всегда есть тот, кто готов работать больше, чем вы
Таких людей много. Среди них есть трудоголики, перфекционисты и люди, просто влюбленные в свою работу. Да, многие из них жертвуют семьей, друзьями, и готовы работать по 80 часов в неделю. Работа и есть их жизнь. Это путь не для нас. Но они отлично способны вытеснить вас на карьерную обочину. Вы не готовы проводить 6 месяцев в году в командировках, чтобы получить повышение, а они – готовы.
Средний китайский школьник усерднее европейского, а сотрудник в Китае готов выполнять вашу работу за четверть вашей зарплаты.
Много работать – не путь к успеху, но работать мало – путь к поражению.
4 Культурная среда
Мало где в мире принято много и честно работать. Если в колледже вы много учитесь, пропадаете в библиотеке и сами сдаете все экзамены, то вы – заучка. А если «весь семестр гулял, но сдал» или другим способом «победил систему», то вы – молодец. На дороге под названием «работай больше» слишком большая конкуренция (дорожная пробка, если хотите), этот способ больше не работает. Вам нужно искать другой путь.
Сложно стремиться к успеху, когда само общество ненавидит успешных и богатых. Ненавидит и завидует. Бедные люди, дорвавшись до денег, начинают выставлять свое богатство на показ. Действительно богатые люди ведут себя скромнее: Билл Гейтс может ходить в футболке за $10, потому что и в ней и без нее он – Билл Гейтс.
Между тем именно бизнесмены создают рабочие места и двигают экономику вперед. Заработная плата наемных сотрудников – это результат конкуренции бизнеса за лучшие кадры. Чем больше бизнесов в стране, тем выше в ней будут зарплаты.
Надо любить свою жизнь и свое время. Деньги – это всего лишь инструмент, который делает вас финансово независимым. А если вы финансово независимы, то вы можете делать, что хотите и не делать, то чего не хотите.
Поосторожнее с «жертвами», когда будете становиться лучшим. Не жертвуйте действительно важными вещами: семьей, друзьями, здоровьем, любимой работой. Быть финансово успешным в 50 лет и не иметь семьи, друзей, здоровья, не любить работу – это не успех, это провал.
Обзор зарплат по Москве | Зарплаты в Киеве |
Решил стать программистом - купи подписку. Вся мощь проекта JavaRush к твоим услугам.
- Профессор всё свою линию гнёт. Все они, старые лекторишки, такие. Всё, что он может рассказать, ты можешь прочесть в книгах. Запомни, ещё ни один человек не научился плавать, прослушав с десяток лекций по этому поводу. Лекции помогают, когда ты 100% в теме и знаешь сам чуть меньше этого профессора.
- Ну, от лекций профессора же есть польза.
- Ага... вернее, мы надеемся, что она есть. Чем больше точек зрения на один и тот же материал ты услышишь, тем больше задумаешься, а как же дела обстоят на самом деле. Услышав только одну точку зрения, ты либо веришь ей, либо нет. Ладно, давай перейдём к делу.
- Давай рассмотрим картинку, которую я уже давал тебе ранее:
1 Переменная, объявленная в методе, существует/видна с начала объявления до конца метода.
2 Переменная, объявленная в блоке кода, существует до конца этого блока кода.
3 Переменные - аргументы метода - существуют до конца выхода из метода.
4 Переменные класса/объекта существуют все время жизни содержащего их объекта. Их видимость регулируется специальными модификаторами доступа.
5 Статические переменные классов существуют все время работы программы. Их видимость также определяется модификаторами доступа.
- Да, помню эту картинку.
- Вот и отлично. Давай напомню тебе некоторые моменты.
- Все переменные, объявленные внутри методов, существуют/видны с начала их объявления до конца метода (пример: 1).
- Если переменная определена/объявлена в каком-то блоке кода, то она существует до конца этого блока кода (пример: 2).
- Если переменная является аргументом функции, то она существует/видна во всем теле данного метода (пример: 3) .
- Если переменная является переменной класса (пример: 4), то она привязана к конкретному объекту и существует все время, пока существует объект данного класса. Если нет ни одного объекта, то нет и ни одной копии переменной. К переменной можно обращаться (переменная видна) из всех методов класса, независимо от того, объявлены они до неё или после неё. Для каждого объекта создаётся своя, независимая от других объектов, переменная. Доступ к переменной невозможен из статических методов.
- Если переменная объявлена статической – помечена ключевым словом static, то она существует все время, когда существует её класс. Обычно JVM загружает класс в память при первом его использовании, тогда же и инициализируются статические переменные.
- В примере выше у нас объявлен класс Cat, у которого есть 4 переменные: a,b,s – обычные, а count – статическая. Если создать несколько объектов такого класса (например, 3 шт.), то каждый из них будет содержать свою собственную копию обычных переменных класса. Статическая же переменная – общая на всех. Формально она даже не находится внутри этих объектов, т.к. существует даже тогда, когда ни одного объекта класса Cat создано не было.
- Вот что произойдет, если мы объявим переменную s статической:
- Ага. Вроде понятно.
- А можно объявить одинаковые переменные?
- В методе - нет. Все переменные, объявленные внутри метода, должны иметь уникальные имена. Аргументы метода также считаются его переменными.
- А как насчёт переменных класса?
- Переменные класса тоже должны быть уникальными в рамках каждого конкретного класса.
Но есть исключение – имена переменных метода и переменных класса могут совпадать.
- А если мы в коде изменяем переменную, а таких переменных две, какая будет изменяться?
- Если в методе видны (доступны) несколько переменных, например, переменная класса и переменная метода, то тогда обращение произойдет к переменной метода.
Пример с двумя переменными count | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Main { public int count = 0; //объявили переменную класса public void run() { count = 15; //обращение к переменной класса int count = 10; //объявили локальную переменную метода count ++; //обращение к переменной метода } } |
- В этом коде объявлены две переменных count. В строке 4 объявлена переменная класса, а в строке 9 – переменная метода.
- Когда метод run будет исполняться, то произойдет вот что:
- В строке 8 мы обращаемся к переменной класса и присваиваем ей значение 15
- В строке 9 объявляется (создается) новая переменная метода – count. Она закрывает собой переменную класса. Любой дальнейший код в методе будет видеть (обращаться) именно к переменной метода.
- Понятно.
- Переменная метода закрывает собой переменную класса. Т.е. обращение будет происходить к переменной метода. Но к переменной класса тоже можно обратиться, только более сложным способом.
Статическая переменная класса | Обычная переменная класса |
---|---|
ClassName.variableName Примеры: Cat.catsCount |
this.variableName Примеры: this.catsCount |
- А что ещё за статические методы и статические переменные?
- Статические методы и переменные привязаны не к объектам класса, а непосредственно к самому классу. Т.е. если мы создадим 10 объектов класса Variables из примера в самом начале уровня, у нас будет 10 переменных classVariable (по одной на каждый объект) и всего одна общая переменная TEXT.
- У меня тут вопрос.
- А чем отличаются статические и нестатические методы?
- Давай рассмотрим, как работает обычный нестатический метод:
Как выглядит код | Что происходит на самом деле | |
---|---|---|
Cat cat = new Cat(); String name = cat.getName(); cat.setAge(17); cat.setChildren(cat1, cat2, cat3); |
Cat cat = new Cat(); String name = Cat.getName(cat); Cat.setAge(cat,17); Cat.setChildren(cat, cat1, cat2, cat3); |
- При вызове метода в виде «объект» точка «имя метода», на самом деле вызывается метод класса, в который первым аргументом передаётся тот самый объект. Внутри метода он получает имя this. Именно с ним и его данными происходят все действия.
- Нифига себе. Так вот как, оказывается, оно все работает!
- А вот как работает статический метод:
Как выглядит код | Что происходит на самом деле | |
---|---|---|
Cat cat1 = new Cat(); Cat cat2 = new Cat(); int catCount = Cat.getAllCatsCount(); |
Cat cat1 = new Cat(); Cat cat2 = new Cat(); int catCount = Cat.getAllCatsCount(null); |
- При вызове статического метода, никакого объекта внутрь не передаётся. Т.е. this равен null, поэтому статический метод не имеет доступа к нестатическим переменным и методам (ему нечего передать в такие методы в качестве this).
- Хм. Вроде понятно. Хотя как-то поверхностно.
- А вот и дядя Диего…
- Привет, Амиго.
- Привет, Диего.
- Я вот тут принёс тебе пару задачек на видимость переменных
№ | Пример | Описание |
---|---|---|
1 |
class Cat { private String name; public void setName(String name) { //написать тут ваш код } } |
Реализовать метод setName, чтобы с его помощью можно было устанавливать значение переменной private String name равное переданному параметру String name. |
2 |
class Cat { private static int catsCount = 0; public static void addNewCat() { //написать тут ваш код } } |
Реализовать метод addNewCat, чтобы при его вызове (т.е. добавлении нового кота), количество котов увеличивалось на 1. За количество котов отвечает переменная catsCount. |
3 |
class Cat { private static int catsCount = 0; public static setCatsCount(int catsCount) { //написать тут ваш код } } |
Реализовать метод setCatsCount так, чтобы с его помощью можно было устанавливать значение переменной catsCount равное переданному параметру. |
4 |
class Cat { private String fullName; public void setName(String firstName, String lastName) { String fullName = firstName + lastName; //написать тут ваш код } } |
Реализовать метод setName, чтобы с его помощью можно было устанавливать значение переменной private String fullName равное значению локальной переменной String fullName. |
5 |
Cat cat1 = new Cat(); //написать тут ваш код Cat cat2 = new Cat(); //написать тут ваш код System.out.println("Cats count is " + Cat.count); |
Написать код, который бы подсчитывал количество созданных котов (count) и на экран выдавалось правильно их количество. |
- Сейчас я расскажу тебе, что такое команда и блок команд. Все очень просто. Тело метода состоит из команд. Каждая команда оканчивается точкой с запятой.
Примеры команд: | ||
---|---|---|
1 | String s = "Name"; | |
2 | System.out.println(1234); | |
3 | return a + b * c; | |
4 | throw new RuntimeException(); | |
5 | ; |
- Блок команд состоит из нескольких команд, объединённых вместе фигурными скобками. Тело метода является блоком команд.
Примеры: | ||
---|---|---|
1 | {} | |
2 | { throw new RuntimeException(); } |
|
3 | { return null; } |
|
4 | { System.out.println(23); System.out.println(1); System.out.println(14); } |
- Почти для всех ситуаций справедливо правило: там, где можно написать одну команду, можно написать и блок команд. Мы увидим это в примерах для задач ниже.
- Привет, Амиго. Сегодня мы разберём условные операторы.
- От программ было бы мало толку, если бы они делали абсолютно одно и то же независимо от того, как меняются внешние обстоятельства. Программе нужно уметь подстраиваться под обстоятельства, и делать одни действия в одних случаях и другие – в других. В Java это реализовано с помощью «условного оператора» - специального ключевого слова, которое позволяет выполнять разные блоки команд в зависимости от правдивости условия.
- Он состоит из трех частей: «условия», «команды 1» и «команды 2». Если условие верно (истинно), тогда выполняется «команда 1», иначе выполняется «команда 2». Команды никогда не выполняются одновременно. Общий вид этого оператора таков:
Код условного оператора |
---|
if (условие) команда_1; else команда_2; |
- Как интересно. Думаю, с таким оператором программировать гораздо интереснее.
- Ага. Вот тебе парочка примеров:
Код | Пояснение | |
---|---|---|
if (a < b) System.out.println("А меньше Б"); else System.out.println("Б меньше А"); |
Если a меньше b, то выполнится первая команда, в противном случае – вторая. Команды никогда не выполнятся одновременно. | |
if (a < b) { System.out.println("А меньше Б"); System.out.println("Б больше А"); } else { System.out.println("Б меньше А"); System.out.println("А больше Б"); } |
Вместо одной команды можно подставить блок команд. В остальном - то же самое. | |
if (a < b) { a = 0; } else { } |
Блок else можно не писать, если он пустой. Данные три примера абсолютно эквиваленты. Можно не писать скобочки, если нужно выполнить только одну команду. Если у нас несколько команд, то скобочки писать обязательно. |
|
if (a < b)
{
a = 0;
}
|
||
if (a < b)
a = 0;
|
- Привет, Амиго. У нас на планете мы пользуемся более продвинутым Паскалем. Вот как это все выглядело бы на Паскале.
Pascal | Java | |
---|---|---|
If a < b Then
WriteLn ('a меньше b');
|
if (a < b)
System.out.println("a меньше b"); |
|
If a < b Then WriteLn('a меньше b') Else WriteLn('a больше b'); |
if (a < b) System.out.println("a меньше b"); else System.out.println("a больше b"); |
|
If a < b Then Begin WriteLn('a меньше b'); WriteLn('a меньше b'); End Else Begin WriteLn('a больше b'); WriteLn('a больше b'); End; End; |
if (a < b) { System.out.println("a меньше b"); System.out.println("a меньше b"); } else { System.out.println("a больше b"); System.out.println("a больше b"); } |
|
If a < b And a < c Then WriteLn('a минимальное из a, b, c'); |
if (a < b && a < c) System.out.println("a минимальное из a, b, c"); |
|
If a < b Or a < c Then WriteLn('a или меньше b, или меньше c'); |
if (a < b || a < c) System.out.println("a или меньше b, или меньше c"); |
|
If Not (a < b) Then WriteLn('b меньше либо равно a') Else WriteLn('b больше a'); |
if ( !(a < b) ) System.out.println("b меньше либо равно a"); else System.out.println("b больше a"); |
|
If a < b Then Begin If a < c Then WriteLn('a – это минимум') Else WriteLn('c – это минимум'); End Else Begin If b < c Then WriteLn('b – это минимум') Else WriteLn('c – это минимум'); End; |
if (a < b) { if (a < c) System.out.println("a – это минимум"); else System.out.println("c – это минимум"); } else { if (b < c) System.out.println("b – это минимум"); else System.out.println("c – это минимум"); } |
|
If a <= b And a <= c Then WriteLn('a – это минимум') Else If b <= a And b <= c Then WriteLn('b – это минимум') Else If c <= a And c <= b Then WriteLn('c – это минимум'); |
if (a <= b && a <= c) System.out.println("a – это минимум"); else if (b <= a && b <= c) System.out.println("b – это минимум"); else if (c <= a && c <= b) System.out.println("c – это минимум"); |
- Хочу рассказать тебе немного о сравнении переменных в Java.
- Самые простые операторы сравнения ты уже знаешь – это меньше (<) и больше (>).
- Ага.
- Так же есть «равно»(==) и «не равно»(!=). А еще «меньше либо равно»(<=) и «больше либо равно»(>=).
- О, это уже интереснее.
- Обрати внимание, что операторов «=<» и «=>» в Java нет!
- Знак «=» используется для операции присваивания, поэтому для равенства используют «==» - два знака равно. Для того, чтобы проверить, что переменные не равны, используют «!=»
- Ясно.
- При сравнении двух переменных в Java с использованием оператора «==», происходит сравнение того, что эти переменные в себе содержат.
- Т.е. для переменных примитивных типов происходит сравнение значений.
- Для переменных ссылочных типов происходит сравнение ссылок. Т.е. если объекты идентичны внутри, но ссылки на них разные, сравнение покажет, что они неравны: результатом сравнения будет false(ложь). Сравнение ссылок будет true(истина), только если обе ссылки указывают на один и тот же объект.
- Для сравнения объектов по их внутреннему содержанию используют специальный метод equals. Этот метод (и все методы класса Object) добавляется компилятором в твой класс, даже если ты их не объявляешь. Поясняю на примерах:
Код | Пояснение |
---|---|
int a = 5; int b = 5; System.out.println(a == b); |
Происходит сравнение примитивных типов. На экран будет выведено true. |
Cat cat1 = new Cat("Vaska"); Cat cat2 = cat1; System.out.println(cat1 == cat2); |
Происходит сравнение ссылок. На экран будет выведено true. Обе переменных хранят ссылки на один и тот же объект. |
String s = new String("Mama"); String s2 = s; System.out.println(s == s2); |
Происходит сравнение ссылок. На экран будет выведено true. Обе переменных хранят ссылки на один и тот же объект. |
Cat cat1 = new Cat("Vaska"); Cat cat2 = new Cat("Vaska"); System.out.println(cat1 == cat2); |
Происходит сравнение ссылок. На экран будет выведено false. Переменные хранят ссылки на два идентичных объекта Cat, но не на один и тот же. |
String s = new String("Mama"); String s2 = new String("Mama"); System.out.println(s == s2); |
Происходит сравнение ссылок. На экран будет выведено false. Переменные хранят ссылки на два идентичных объекта String, но не на один и тот же. |
Cat cat1 = new Cat("Vaska"); Cat cat2 = new Cat("Vaska"); System.out.println(cat1.equals(cat2)); |
Происходит сравнение объектов. На экран будет выведено true. Переменные хранят ссылки на два идентичных объекта Cat |
String s = new String("Mama"); String s2 = new String("Mama"); System.out.println(s.equals(s2)); |
Происходит сравнение объектов. На экран будет выведено true. Переменные хранят ссылки на два идентичных объекта String |
- И, кстати, чуть не забыл, вот тебе несколько заданий:
Задачи |
---|
Задача 1. Минимум двух чисел Ввести с клавиатуры два числа, и вывести на экран минимальное из них. |
Задача 2. Максимум четырех чисел Ввести с клавиатуры четыре числа, и вывести максимальное из них. |
Задача 3. Сортировка трех чисел Ввести с клавиатуры три числа, и вывести их в порядке убывания. |
Задача 4. Сравнить имена Ввести с клавиатуры два имени, и если имена одинаковые, вывести сообщение «Имена идентичны». Если имена разные, но их длины равны – вывести сообщение – «Длины имен равны». |
Задача 5. 18+ Ввести с клавиатуры имя и возраст. Если возраст меньше 18 вывести надпись «Подрасти еще» |
Задача 6. И 18-ти достаточно Ввести с клавиатуры имя и возраст. Если возраст больше 20 вывести надпись «И 18-ти достаточно» |
- Привет, Амиго. Хочу рассказать тебе о новом типе данных. Это тип boolean. Переменные этого типа могут принимать всего два значения – true (истина/правда) и false (ложь).
- А как его использовать?
- Этот тип неявно используется во многих местах. Так же, как и результат любого сложения – число, то и результат любого сравнения – истина или ложь – тип boolean. Примеры:
Код | Пояснение | |
---|---|---|
boolean m; | Два данных выражения эквивалентны. Значение переменой типа boolean по умолчанию false («ложь»). | |
boolean m = false; | ||
if (a > b)
System.out.println(a);
|
В переменную m будет записан результат сравнения – true или false. Условие выполняется, если переданное в него выражение истинно – true. | |
boolean m = (a > b); if (m) System.out.println(a); |
||
boolean m = (a > b); if (m == true) System.out.println(a); |
Не нужно сравнивать логическую переменную (типа boolean) c true или false. Результат сравнения сам будет иметь тип boolean, и в точности будет совпадать со значением сравниваемой переменой: true == true – истина. Результат выражения – true. true == false – ложь. Результат сравнения – false. |
|
boolean m = (a > b); if (m) System.out.println(a); |
- Еще примеры:
Код | Пояснение | |
---|---|---|
public boolean isALessThenB (int a, int b) { if (a < b) return true; else return false; } |
Данный метод проверяет, что число А меньше числа Б. Показаны четыре эквивалентных записи сравнения. Внизу самая компактная и корректная. Всегда старайся использовать компактную запись. |
|
public boolean isALessThenB (int a, int b) { boolean m = (a < b); if (m) return true; else return false; } |
||
public boolean isALessThenB (int a, int b) { boolean m = (a < b); return m; } |
||
public boolean isALessThenB (int a, int b) { return a < b; } |
- А что мне делать, если я хочу записать, выражение 0<a<b ?
- Ну, выражений, которые включают три оператора, в Java нет, поэтому тут нужно воспользоваться такой конструкцией: (0<a) И (a<b)
- Так и писать И?
- Подожди, сейчас все объясню.
- В Java есть три логических оператора: AND (и), OR (или) и NOT (не). С помощью них можно строить условия различной сложности. Эти операторы можно применять только к выражению, имеющему тип boolean. Т.е. (a+1) AND (3) написать нельзя, а (a>1)AND (a<3) – можно.
- Оператор NOT – унарный – его действие распространяется только на выражение справа от него. Он больше похож на знак «минус» перед отрицательным числом, чем на знак умножить
- С переменными типа boolean (логический тип) можно выполнять различные операции.
- А какие?
- Вот сейчас мы их и рассмотрим:
Логический oператор | Обозначение в Java | Выражение | Результат |
---|---|---|---|
AND (и) | && | true && true | true |
true && false | false | ||
false && true | false | ||
false && false | false | ||
OR (или) | || | true || true | true |
true || false | true | ||
false || true | true | ||
false || false | false | ||
NOT(не) | ! | ! true | false |
! false | true | ||
Распространённые комбинации и выражения | m && !m | false | |
m || !m | true | ||
! (a && b) | !a || !b | ||
! (a || b) | !a && !b |
- А можно побольше примеров?
- Конечно:
Запись в Java | Логическая запись | Пояснение |
---|---|---|
(a<3) && (a>0) | (a < 3) AND (a>0) | a<3 и a>0 |
(a>10)|| (a<100) | (a>10) OR (a<100) | a>10 или a<100 |
(a<b)&& (!(c<=d)) | (a<b) AND (NOT (c<=d)) | a<b и (не (c<=d)) |
- Привет.
- Привет, Элли!
- Настало… время изучать циклы! Циклы такая же простая штука, как и условия, только интересней. С помощью цикла можно выполнить какую-нибудь команду или блок команд несколько раз. Общий вид цикла такой:
Цикл |
---|
while(условие типа boolean) команда; |
while(условие типа boolean) блок команд в фигурных скобках |
- Все очень просто. Команда или блок команд выполняются снова и снова, пока условие цикла истинно – равно true. Сначала проверяется условие, затем выполняется тело цикла (блок команд), затем снова проверяется условие и снова выполняется тело цикла. И так до тех пор, пока условие не станет ложным.
- А если оно всегда истинно или всегда ложно?
- Если оно всегда истинно, программа никогда не прекратит работать и будет всегда выполнять цикл. А если всегда ложно, то тело цикла не выполнится ни разу.
Примеры.
Код | Вывод на экран | |
---|---|---|
int i = 3; while (i >= 0) { System.out.println(i); i--; //уменьшение i на 1 } |
3 2 1 0 |
|
int i = 0; while (i < 3) { System.out.println(i); i++; //увеличение i на 1 } |
0 1 2 |
|
boolean isExit = false; while (!isExit) { String s = buffer.readLine(); isExit = s.equals("exit"); } |
Программа будет вводить строки с клавиатуры, пока не будет введена строка "exit". | |
while (true) System.out.println("C"); |
Программа будет вечно печатать на экран букву C. | |
while (true) { String s = buffer.readLine(); if (s.equals("exit")) break; } |
Программа будет вводить строки с клавиатуры, пока не будет введена строка "exit". |
- Вроде и не сложно. После условий. Уже хочется попробовать.
- Привет друг. Билаабо сейчас расскажет, как это все выглядело бы на Паскале.
Pascal | Java |
---|---|
i := 3; While i >= 0 Do Begin WriteLn(i); i := i - 1; End; |
int i = 3; while (i >= 0) { System.out.println(i); i--; } |
i := 0; While i < 3 Do Begin WriteLn(i); i := i + 1; End; |
int i = 0; while (i < 3) { System.out.println(i); i++; } |
isExit := False; While Not isExit Do Begin ReadLn(s); isExit := (s = 'exit'); End; |
boolean isExit = false; while (!isExit) { String s = buffer.readLine(); isExit = s.equals("exit"); } |
While True Do WriteLn('C'); |
while (true) System.out.println('C'); |
While True Do Begin ReadLn(s); If s = 'exit' Then Break; End; |
while (true) { String s = buffer.readLine(); if (s.equals("exit")) break; } |
- Ну, сравнение с Паскалем полезно тем, кто его знает.
- А ты что - не знаешь? Это ж самый любимый язык на моей планете!
- Ладно, ладно. Верю, что это классный язык. И если бы я его уже знал, это бы мне помогло.
- Привет, Амиго!
- Я слышал, ты циклы выучил. Подкину-ка я тебе ещё пару задачек.
Задачи на циклы | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1. 10 чисел Вывести на экран числа от 1 до 10, используя цикл while. |
||||||||||||||||||||||||||||||||||||||||
2. 10 чисел наоборот Вывести на экран числа от 10 до 1, используя цикл while. |
||||||||||||||||||||||||||||||||||||||||
3. Хорошего не бывает много Ввести с клавиатуры строку и число N. Вывести на экран строку N раз, используя цикл while. Пример ввода: абв 2 Пример вывода: абв абв |
||||||||||||||||||||||||||||||||||||||||
4. S-квадрат Вывести на экран квадрат из 10х10 букв S используя цикл while. Буквы в каждой строке не разделять. |
||||||||||||||||||||||||||||||||||||||||
5. Таблица умноження Вывести на экран таблицу умножения 10х10 используя цикл while. Числа разделить пробелом. Example output:
|
- Хочу рассказать тебе ещё об одном цикле. Это цикл называется for. Это ещё одна запись цикла while, просто более компактная и удобная [для программистов]. Примеры:
while | for | |
---|---|---|
int i = 3; while (i >= 0) { System.out.println(i); i--; } |
for (int i = 3; i >= 0; i--) { System.out.println(i); } |
|
int i = 0; while (i < 3) { System.out.println(i); i++; } |
for (int i = 0; i < 3; i++) { System.out.println(i); } |
|
boolean isExit = false; while (!isExit) { String s = buffer.readLine(); isExit = s.equals("exit"); } |
for (boolean isExit = false; !isExit; ) { String s = buffer.readLine(); isExit = s.equals("exit"); } |
|
while (true)
System.out.println("C"); |
for (; true; )
System.out.println("C"); |
|
while (true)
{
String s = buffer.readLine();
if (s.equals("exit"))
break;
} |
for (; true; )
{
String s = buffer.readLine();
if (s.equals("exit"))
break;
} |
- Эээ?
- Данные циклы эквиваленты. Если while содержит в скобках одно условие, то for – три. Но при компиляции for превращается в такой же цикл, как и while.
- Первое выражение в цикле for (выделено зеленым) выполняется один раз до цикла.
- Второе выражение выполняется каждый раз перед исполнением тела цикла – аналогично условию в цикле while.
- Третье – каждый раз после исполнения тела цикла.
- А зачем нужен ещё один цикл. С while все прекрасно понятно.
- Это сделано для удобства программистов. Циклы встречаются в программировании очень часто, и удобно, когда в одной строчке собрана информация о стартовом значении переменой, условии её изменения и команда, которая её меняет.
- Амиго, ты не поверишь, но в Паскале есть цикл For. Он вообще есть практически во всех языках программирования. Только в Паскале он гораздо понятнее. Вот, смотри:
Pascal | Java | |
---|---|---|
For i := 1 to 10 do Begin Writeln(i); End; |
for (int i = 1; i <= 10; i++) { System.out.println(i); } |
|
For i := 1 to 10 do step 2 Begin Writeln(i); End; |
for (int i = 1; i <= 10; i= i + 2) { System.out.println(i); } |
|
For i := 10 downto 0 do step 2 Begin Writeln(i); End; |
for (int i = 10; i >= 0; i= i - 2) { System.out.println(i); } |
- Сегодня мой счастливый день. Я придумал для тебя 5 новых задач. Креативность так и прёт. Удачи тебе мой друг. Она тебе понадобится…
Задачи на отработку For |
---|
1. Четные числа Используя цикл for вывести на экран чётные числа от 1 до 100 включительно. Через пробел либо с новой строки. |
2. Рисуем прямоугольник Ввести с клавиатуры два числа m и n. Используя цикл for вывести на экран прямоугольник размером m на n из восьмёрок. Пример: m=2, n=4 8888 8888 |
3. Рисуем треугольник Используя цикл for вывести на экран прямоугольный треугольник из восьмёрок со сторонами 10 и 10. Пример: 8 88 888 ... |
4. Рисуем линии Используя цикл for вывести на экран: - горизонтальную линию из 10 восьмёрок - вертикальную линию из 10 восьмёрок. |
5. Все любят Мамбу Ввести с клавиатуры имя и, используя цикл for 10 раз, вывести: [*имя* любит меня.] Пример текста: Света любит меня. Света любит меня. … |
- Привет, Амиго. Как успехи?
- Отлично, профессор Нудлс. Уже выучили циклы for и while.
- Это же великолепно. Так и знал, что профессор Нудлс – лучший преподаватель в мире. Вместе мы посрамим всех недалёких, которые утверждают, что надо начинать с практики. Ты – моё живое доказательство, насколько это может быть живым для робота. Пройди по ссылке, и там ты найдешь что-то полезное для себя:
- Привет, Амиго! Я был должен тебе сегодня что-то прочитать, но давай сначала посмотрим немного телевизор, а потом приступим?
- Здорово, боец!
- Здравия желаю, капитан Бобров!
- У меня для тебя шикарная новость. Вот тебе задания для закрепления полученных навыков. Выполняй их каждый день, и твои навыки будут расти с неимоверной скоростью. Они специально разработаны для выполнения их в Intellij IDEA.
Дополнительные задания для выполнения в Intellij Idea |
---|
1. Я никогда не буду работать за копейки Используя цикл вывести на экран сто раз надпись: «Я никогда не буду работать за копейки. Амиго» |
2. Среднее такое среднее Ввести с клавиатуры три числа, вывести на экран среднее из них, т.е. не самое большое и не самое маленькое. |
3. Посчитать сумму чисел Вводить с клавиатуры числа и считать их сумму. Если пользователь ввел -1, вывести на экран сумму и завершить программу. -1 должно учитываться в сумме. |
4. Меня зовут 'Вася'... Ввести с клавиатуры строку name. Ввести с клавиатуры дату рождения (три числа): y, m, d. Вывести на экран текст: «Меня зовут name Я родился d.m.y» Пример: Меня зовут Вася Я родился 15.2.1988 |