- Писать циклы
for,whileиdo-whileи выбирать между ними - Управлять циклом с помощью
breakиcontinue - Создавать массив, читать и изменять его элементы, находить их сумму и максимум
Представь, что нужно напечатать поздравление каждому из 30 учеников класса. Можно 30 раз написать println, но что, если учеников 3000? Компьютеры прекрасно умеют без устали повторять одну и ту же работу — для этого существуют циклы. А чтобы хранить много значений в одном месте, используют массивы.
Циклы for и while
Цикл for удобен, когда число шагов известно заранее. В его заголовке три части: начало (int i = 1), условие (i <= 5) и шаг (i++). Цикл while повторяется, пока условие истинно, — он подходит, когда заранее неизвестно, сколько будет повторений.
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
System.out.println();
int sum = 0;
for (int i = 2; i <= 10; i += 2) {
sum += i;
}
System.out.println("Sum of even numbers: " + sum);
int balance = 100;
int years = 0;
while (balance < 200) {
balance += balance / 10;
years++;
}
System.out.println(years + " years, balance " + balance);
}
}1 2 3 4 5 Sum of even numbers: 30 8 years, balance 212
В последней части Эльвин кладёт в банк 100 манатов, и каждый год к сумме прибавляется 10%. Мы не знаем, сколько лет придётся ждать, поэтому используем цикл while: он работает, пока баланс не дойдёт до 200. balance / 10 — целочисленное деление, поэтому проценты каждый год округляются вниз до целых манатов.
int в программе каждый год отбрасывает гяпики.do-while, break и continue
Цикл do-while проверяет условие в конце, поэтому его тело выполняется хотя бы один раз, даже если условие ложно. break сразу завершает цикл, а continue пропускает остаток текущего шага и переходит к следующему.
public class Main {
public static void main(String[] args) {
int tries = 0;
do {
tries++;
System.out.println("Attempt " + tries);
} while (tries < 0);
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
continue;
}
if (i > 7) {
break;
}
System.out.print(i + " ");
}
System.out.println();
}
}Attempt 1 1 2 4 5 7
Условие tries < 0 ложно с самого начала, но «Attempt 1» всё равно напечаталось. Во втором цикле 3 и 6 пропущены из-за continue, а на 8 break полностью остановил цикл, поэтому 9 и 10 не напечатаны.
Массивы
Объект, который хранит по порядку фиксированное количество значений одного типа. К элементам обращаются по индексу, начиная с 0, а длина массива после создания не меняется.
public class Main {
public static void main(String[] args) {
int[] scores = {85, 92, 78, 64, 99};
System.out.println("First: " + scores[0]);
System.out.println("Count: " + scores.length);
scores[3] = 70;
int sum = 0;
int max = scores[0];
for (int s : scores) {
sum += s;
if (s > max) {
max = s;
}
}
System.out.println("Average: " + (double) sum / scores.length);
System.out.println("Max: " + max);
String[] days = new String[3];
System.out.println(days[0]);
double[] temps = new double[2];
System.out.println(temps[1]);
}
}First: 85 Count: 5 Average: 84.8 Max: 99 null 0.0
int[] scores = {85, 92, ...};создаёт массив с готовыми значениями, аnew String[3]— массив из 3 пустых ячеек.scores.length— количество элементов (без скобок: это поле, а не метод).for (int s : scores)— цикл for-each: он по очереди передаёт каждый элемент массива в переменнуюs.- Элементы нового массива заполняются автоматически: числа —
0или0.0,boolean—false, а объекты (например,String) —null.
Класс Arrays и двумерные массивы
В классе java.util.Arrays есть готовые инструменты для массивов: Arrays.toString() превращает массив в читаемый текст, а Arrays.sort() упорядочивает элементы по возрастанию. Элементами массива могут быть и другие массивы — такой двумерный массив похож на таблицу: первый индекс — строка, второй — столбец.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {42, 7, 19, 3, 25};
System.out.println(Arrays.toString(nums));
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
int[][] table = new int[3][4];
for (int r = 0; r < table.length; r++) {
for (int c = 0; c < table[r].length; c++) {
table[r][c] = (r + 1) * (c + 1);
}
}
for (int[] row : table) {
System.out.println(Arrays.toString(row));
}
System.out.println(table[2][3]);
}
}[42, 7, 19, 3, 25] [3, 7, 19, 25, 42] [1, 2, 3, 4] [2, 4, 6, 8] [3, 6, 9, 12] 12
Главное
for (начало; условие; шаг)используют, когда число шагов известно, аwhile— чтобы повторять, пока выполняется условие.do-whileпроверяет условие в конце и выполняет тело хотя бы один раз.breakзавершает цикл, аcontinueпереходит к следующему шагу.- Длина массива фиксирована, индексы идут от 0 до
length - 1. Arrays.toString()помогает напечатать массив, аArrays.sort()— отсортировать его.
Проверь себя
Вопросов: 10. Каждый правильный ответ приносит XP.
for (int i = 0; i < 4; i++)?