Книга: Основы программирования с Java
Назад: Пример работы с двумерным массивом
Дальше: Работа со строками

Вопросы

Задача

Какой будет вывод следующего сегмента кода?

int[] array = {2, 1, 0, 2, 3, 4};

IO.output(array[2]);

IO.output(array[3]);

IO.output(array[4]);

IO.output(array[1]);

Варианты ответа:

1.      1022

2.      2341

3.      0231

4.      Error

Ответ: 3.

Объяснение

Индексы массивов начинаются с 0. Поэтому array[2], array[3], array[4] и array[1] представляют третий, четвертый, пятый и второй элемент массива соответственно. Это дает результат 0231.

Задача

public static int q2(int[] array) {

int index = 0;

for (int i = 0; i < array.length; i++) {

if (array[i] < array[index]) index = i;

}

return index;

}

Учитывая метод "q2" выше, каким будет вывод следующего сегмента кода?

int[] array = {22, 99, 11, 99, 33};

IO.output(q2(array));

Варианты ответа:

1.      2

2.      11

3.      99

4.      3

Ответ: 1.

Объяснение

Код просматривает массив и находит индекс целого с наименьшим значением в массиве.

Задача

public static void change(char[] array, int index1, int index2) {

char temp = array[index2];

array[index1] = array[index2];

array[index2] = temp;

}

Учитывая метод " change " выше, каким было бы содержимое массива после выполнения следующего сегмента кода?

char[] array = {'H', 'K', 'U', 'S', 'T'};

change(array, 1, 3);

Варианты ответа:

1. {'H', 'S', 'U', 'K', 'T'}

2. {'U', 'K', 'U', 'S', 'T'}

3. {'U', 'K', 'H', 'S', 'T'}

4. {'H', 'S', 'U', 'S', 'T'}

Ответ: 4.

Объяснение

В первой строке метода, char переменная temp хранит четвертый символ, 'S' в массиве.

Во второй строке метода, второй символ в массиве присваивает четвертый символ в массиве. Содержание массив становится {'H', 'S', 'U', 'S', 'T'}.

В третьей строке метода, четвертый символ в массиве присваивает значение переменной temp, которое является «S». Тем не менее, четвертый символ уже «S» до присвоения. Поэтому содержание массива остается {'H', 'S', 'U', 'S', 'Т'}.

Задача

Каким будет вывод следующего сегмента кода?

int i = 0;

int j = 0;

for (i = 0; i < 3; i++) {

for (j = 0; j < 3; j++) {

if (j == 1) break;

}

}

IO.outputln(i + " " + j);

Варианты ответа:

1. 0 1

2. 0 2

3. 3 1

4. 3 2

Ответ: 3.

Объяснение

В Java, выражение break вызовет прерывание выполнения внутреннего for цикла, когда переменная j равна 1.

Внешний for цикл будет продолжать исполняться.

Таким образом, итоговые значения i и j будут 3 и 1 соответственно.

Задача

99.0      89.0      85.0      92.0

90.0      74.0      75.0      82.0

85.0      75.0      64.0      91.0

72.0      82.0      81.0      94.0

Учитывая scores 2D массив выше, какое из следующих выражений может установить выделенный элемент как 0,0?

Варианты ответа:

1. scores[2][3] = 0.0;

2. scores[1][2] = 0.0;

3. scores[3][2] = 0.0;

4. scores[2][1] = 0.0;

Ответ 2.

Объяснение

Выделенный элемент находится во второй строке третьего столбца 2D массива. Индекс строки и столбца для доступа к элементу 1 и 2 соответственно.

Таким образом, scores[1][2] = 0.0; установит выделенный элемент 0.0.

Задача

Дан 4 х 4 целый 2D массив arr. Каким будет значение, хранящееся в arr[1][3] после выполнения следующего кода для инициализации?

int size = 4;

for (int i = 0; i < size; i++) {

for (int j = 0; j < size; j++) {

arr[i][j] = size * j + i;

}

}

Варианты ответа:

1. 7

2. 2

3. 8

4. 13

Ответ: 4.

Объяснение

После инициализации, содержание arr становится:

0        4        8        12

1        5        9        13

2        6        10       14

3       7       11       15

arr[1][3] относится к элементу второй строки и четвертого столбца.

Таким образом, значение 13.

Упражнение

Теперь, когда вы узнали об основах массивов, можете ли вы определить вывод для каждого из сегментов кода ниже?

Code segment 1

int[] a;

a[1] = 1;

a[2] = 2;

a[3] = 3;

IO.outputln(a[0]);

Code segment 2

int[] a = {1, 2, 3, 4};

int[] b = a;

b[0] = 3;

b[1] = 2;

for (int i = 0; i < 4; i++)

IO.output(a[i]);

Code segment 3

int() a = new int(20);

if (a(10) == 0)

IO.output("zero");

Code segment 4

int[] a = {4, 3, 2, 1};

for (int i = 0; i < 4; i++)

IO.output(i);

Code segment 5

int[] a = {1.5, 2.5, 3.5};

double avg = 0;

for (int i = 0; i < a.length; i++)

avg += a[i];

avg /= 3.0;

IO.output(avg);

Ответ:

Демонстрация сортировки изображений

Загрузите проект Sorting Images.

Завершите метод maxIndex() в соответствие с инструкциями, данными в классе ImageSorter.

Запустите программу, создав новый экземпляр ImageSorter. Холст отобразится, показывая 8 различных изображений в случайных позициях.

Вы можете затем щелкнуть правой кнопкой мыши на созданном экземпляре, запустить метод moveInPosition(). Изображения будут отсортированы от самого короткого до самого высокого на холсте.

Вы также можете проверить свой результат сортировки, запустив метод isAscendinglySorted(). Значение trueshould будет возвращено, если изображения сортируются от короткого до самого высокого.

Символьные строки

Тема, которую мы будем далее обсуждать, представляет последовательности символов и файловый ввод/вывод.

На самом деле, строки и файлы должны быть хорошо знакомы всем вам, так как мы использовали их, довольно широко в течение последнего времени.

Мы начали использовать строки с самого начала.

Помните, что наша первая программа Java распечатала сообщение "Hello World!".

И "Hello World!" представляет собой строку символов.





И мы использовали изображения, хранящиеся в файлах, и программы Java, которые мы написали, все были сохранены в файлах.

Наша первая программа Java вывела приветственное сообщение, "Привет, мир", и с тех пор мы прошли долгий путь.

Всякий раз, когда компилятор Java встречает строковый литерал, заключенный в двойные кавычки, он создает объект String, с соответствующей последовательностью символов.

Вы можете также объявить строку с помощью класса String.







Так, String greeting = "Hello world!" создаст объект типа String с "Hello world!" в качестве своего значения.

Использование System.out.println с переменной – строкой символов "greeting" в качестве параметра будет распечатывать сообщение "Hello world!" в консоли.

Если вы захотите, вы можете также использовать IO.outputln, что будет выдавать тот же результат.

Строка представляет собой последовательность символов. И Java предоставляет класс String для создания и манипулирования строками.

Этот класс String предоставляет методы для работы с отдельными символами в строке.

Например, когда вы диктуете по буквам слово, вы должны смотреть на отдельные символы.

Также необходима такая важная операция при сравнении строк, как организация слов или имен в алфавитном порядке.

Другой важной операцией является поиск определенных строк. Это в основном то, что вы делаете, когда вы ищете информацию в Интернете.

Другие полезные операции со строками включают в себя извлечение подстрок и преобразование строк в прописные и строчные буквы.

Я далее объясню, как эти операции могут быть выполнены со строками, используя больше примеров.

Важно отметить, что строки являются неизменяемыми.

То есть, как только строковый объект создан, он не может быть изменен. Я поговорю об этом позже.

Мы ввели символьный тип char, когда мы говорили о примитивных типах данных.

Так char является одним из восьми примитивных типов данных. И тип char используется для хранения только одного любого символа.

Java использует 16-бит, чтобы представлять символы и кодировать их с помощью 16-битного Unicode формата, который используется для представления многих других языков, помимо английского языка.

И помните, что для символа используется пара одинарных кавычек.







Например, здесь мы объявляем класс студентов. Если мы хотим включить в качестве переменной экземпляра пол студента, мы можем использовать "M" для представления мужчин и "F" для студенток.

Если вместо того, чтобы использовать только один символ, мы хотим написать все слово, male или female, char не может быть использован в качестве типа данных.







Например, если мы укажем male в паре одинарных кавычек, это приведет к ошибке компиляции.

Мы должны использовать класс String, для того чтобы использовать слово male или female для представления пола в этом примере.







Далее, можно спросить, как можно создать символ, использующий одинарные кавычки или строку с двойными кавычками как один символ.

Сделать это можно с помощью использования дополнительной обратной косой черты перед одинарной или двойной кавычкой, или любых других специальных символов.







Например, если человек хочет распечатать сообщение,

"She received an "A"" с А, вписанной в двойные кавычки.







Обратный слэш перед двойными кавычками выполнит эту распечатку.

Очень часто, мы хотим сохранить более одного символа вместе, как единое целое.

Например, некоторые имена, идентификаторы, которые содержат больше, чем просто цифры, имена файлов, ссылки на веб-страницы, и многое, многое другое.

Один из возможных подходов заключается в создании строки как массива символов типа сhar.

На самом деле, один из конструкторов класса String позволяет создать строку, указав массив символов.







В этом примере, nameArray это массив символьного типа, который инициализируется как последовательность символов, формирующая имя, Мартин.

Используя nameArray в качестве аргумента конструктора String, создается строка с именем, nameString.

И обратите внимание, что String начинается с заглавной буквы "S".

String является абстрактным типом данных. Абстрактный тип данных является типом данных, внутреннее представление которого скрыто от пользователя.

Мы знаем, что строка должна представлять последовательность символов, и нам нужны методы, которые могут быть использованы для работы со строками, но нам действительно не нужно знать, как строки представлены внутри в компьютере.

И некоторые из операций, которые мы будем обсуждать, включают в себя:

– Методы определения длины строки, определения символа в указанном месте.

– Выделение подстроки заданной строки.

– Сравнение двух строк на равенство или в определенном порядке.

– Объединение строк для формирования длинных строк и многое другое.

Как уже обсуждалось, строка хранит последовательность символов.

Для строк с длиной N, символы, хранящиеся в строке, могут быть проиндексированы от 0 до N-1.

Как мы уже видели много раз прежде, самый простой способ указать строку является использование пары двойных кавычек.







В этом примере, мы определяем класс студентов, и одна из переменных экземпляра это имя студента типа String, и объявление здесь присваивает символьную строку Мартин переменной studentName.

Здесь показан синтаксис объявления и инициализации переменной типа String.

String имеет ссылочный тип и экземпляры, созданные из класса String, являются объектами.







В этом примере, ссылочная переменная studentName типа String объявлена, но еще не инициализирована.

Переменные можно инициализировать в конструкторе, когда параметр конструктора присваивается переменной studentName.

Назад: Пример работы с двумерным массивом
Дальше: Работа со строками