Метки. В Java отсутствует оператор goto. Но хотя программирование с применением goto и считается плохим тоном, существуют задачи, в которых его использование очень удобно. Основным примером такой ситуации является совершение выхода одновременно из двух вложенных циклов.
Эта проблема решается в Java использованием меток. Любая инструкция в программе может быть снабжена меткой, которая представляет собой содержательное имя, позволяющее сослаться на соответствующую инструкцию.
метка: инструкция
Несмотря на то, что метка может быть установлена перед любой инструкцией, на практике имеет смысл применять метки только перед циклическими конструкциями for, while, do, условными конструкциями if, switch и блоками {}. Чтобы «выбраться» из вложенного цикла или блока, достаточно снабдить меткой соответствующий внешний блок и указать её в команде break, которая передаёт управление первой инструкции, следующей за блоком.
Примеры:
В данном случае break осуществит выход сразу из двух циклов.
Ещё один пример выхода из сложной конструкции:
boolean t = true;
a:
{
b:
{
c:
{
System.out.println("До break");
if (t) {
break b;
}
System.out.println("He будет выполнено ");
}
System.out.println("He будет выполнено ");
}
System.out.println("После break");
}
run:
До break
После break
Выход из методов (процедур). В Java для реализации выхода из методов (процедур) используется метод return, который приведет к немедленному завершению работы и передаче управления коду, вызвавшему этот метод. Ниже приведен пример, иллюстрирующий использование оператора return:
boolean t = true;
System.out.println("До return");
if (t) { return; }
System.out.println("Этo не будет выполнено ");
run:
До return
Для выхода из программы используется метод System.exit(КодОшибки). Если программа заканчивается нормально, то КодОшибки должен быть 0:
System.exit(0);
1.5 Одномерные статические массивы
Одномерные массивы служат для хранения линейного списка с данными. Статические массивы поддерживаются на уровне Java-синтаксиса. Число элементов указывается явно при создании объекта массива или определяется автоматически при перечислении элементов массива. По умолчанию элементы массива объектов устанавливаются в null или в 0 для простых типов. Индексация элементов начинается с 0. Размер массива определяется через функцию length.
Рассмотрим пример работы с одномерными статическими массивами:
package tsn01.array;
import java.util.Arrays;
public class TSN01_Array {
public static void main(String[] args) {
// Пример работы с одномерными статическими массивами
int a[], b[]; // Переменные-массивы целых чисел
a = new int[10]; // Создание массива без инициализации
b = new int[]{1, 2, 3, 4}; // Создание массива с инициализацией
String s[] = new String[] {"Hello ", "world", "!!!"}; // Описываем и создаем массив строк
Arrays.fill(a, 0); // Заполнить массив нулями
a[0] = 20; a[1] = 10; a[2] = 5; a[3] = 33; // Устанавливаем значения 4 элементам
Arrays.fill(a, 5,10,-1); // Присвоить с 5 по 9 (10-1) элементам значение "-1"
Arrays.sort(a); // Сортируем массив
b[3] = b[1]*0b11+b[2]*0x2; // Рассчитываем значение для 4 элемента
System.out.println(Arrays.toString(a)); // Вывод на экран массива "a"
System.out.println(Arrays.toString(b)); // Вывод на экран массива "b"
System.out.println(Arrays.toString(s)); // Вывод на экран массива "s"
// Вывод на экран размеров массивов
System.out.println("Количество элементов в массиве \"a\": " + a.length);
System.out.println("Количество элементов в массиве \"b\": " + b.length);
System.out.println("Количество элементов в массиве \"str\": " + s.length);
System.out.println(s[0] + s[1]); // Доступ к элементам массива
}
}
Результат работы программы:
[-1, -1, -1, -1, -1, 0, 5, 10, 20, 33]
[1, 2, 3, 12]
[Hello , world, !!!]
Количество элементов в массиве "a": 10
Количество элементов в массиве "b": 4
Количество элементов в массиве "str": 3
Hello world
1.6 Многомерные статические массивы
Многомерные статические массивы служат для хранения двухмерных таблиц с данными. Рассмотрим пример работы с двумерным статическим массивом:
package tsn01.matrix;
public class TSN01_Matrix {
public static void main(String[] args) {
// Работа с двумерным статическим массивом чисел
// Создание исходных данных (элементов массива) и вывод их на экран
final int r = 4; // Количество строк
final int c = 5; // Количество столбцов
int m[][] = new int[r][c]; // Двумерный массив
int k; System.out.println("Matrix:");
for (int i = 0; i < r; i++) { // Цикл по строкам
for (int j = 0; j < c; j++) { // Цикл по колонкам
k = (int) Math.round(Math.random() * 100); // Получение случайного числа
m[i][j] = k; // Присвоение элементу массива числа
System.out.print(String.format("%5d", m[i][j])); // Вывод на экран элемента массива
} System.out.println("");
}
// Поиск минимума и максимума в массиве
int min = m[0][0], max = m[0][0], maxi = 0, maxj = 0, mini = 0, minj = 0; // Задаем начальные значения мин и макс
for (int i = 0; i < r; i++) { // Цикл по строкам
for (int j = 0; j < c; j++) { // Цикл по колонкам
k = m[i][j]; // Получаем элемент массива
if (k > max) { max = k; maxi = i; maxj = j; } // Поиск максимума
if (k < min) { min = k; mini = i; minj = j; } // Поиск минимума
}
}
// Меняем максимальный и минимальный элементы в масиве местами
k = m[maxi][maxj]; m[maxi][maxj] = m[mini][minj]; m[mini][minj] = k;
// Вывод измененного массива на экран
System.out.println("New matrix:");
for (int i = 0; i < r; i++) { // Цикл по строкам
for (int j = 0; j < c; j++) { // Цикл по колонкам
System.out.print(String.format("%5d", m[i][j])); // Вывод на экран элемента массива
} System.out.println("");
}
}
}
Результат работы программы:
Matrix:
42 83 94 96 1
2 64 27 32 10
20 86 49 14 36
12 35 14 65 97
New matrix:
42 83 94 96 97
2 64 27 32 10
20 86 49 14 36
12 35 14 65 1
1.7 Динамические массивы-списки
Динамические массивы реализованы на уровне параметризованных классов: Vector и ArrayList. Однако в качестве элементов простые типы выступать не могут, допускаются только объектные типы.