Читать «Java: руководство для начинающих» онлайн - страница 358

Герберт Шилдт

Как обозначается оператор сдвига вправо без знака? »>

Перепишите рассмотренный ранее в этой главе класс MinMax таким образом, чтобы в нем использовалась разновидность for-each цикла for. // Нахождение минимального и максимального значений в массиве, class MinMax { public static void main(String args[]) { int nums[] = new int[10]; int min, max; nums[0] = 99; nums[l] = -10; nums[2] = 100123; nums[3] = 18; nums[4] = -978; nums[5] = 5623; nums[6] = 4 63; nums[7] = -9; nums[8] = 287; nums[9] = 4 9; min = max = nums[0]; for(int v : nums) { if(v < min) min = v; if(v > max) max = v; } System.out.println("min and max: " + min + " " + max); } }

В примере для опробования 5.1 была реализована пузырьковая сортировка. Можно ли в программе из этого примера заменить обычный цикл for его разновидностью for-each? Если нельзя, то почему? Циклы for, выполняющие сортировку в классе Bubble, нельзя преобразовать в вариант for-each. Что касается внешнего цикла, то текущее значение его переменной используется во внутреннем цикле. А что касается внутреннего цикла, то для перестановки следующих не по порядку элементов требуются операции присваивания значений элементам массива, чего нельзя добиться в варианте for-each.

Можно ли управлять оператором switch с помощью объектов типа String? Можно, начиная с версии JDK 7. Глава 6. Дополнительные сведения

о методах и классах

Допустим, имеется следующий фрагмент кода: class X { private int count; Является ли допустимым приведенный ниже фрагмент кода? class Y { public static void main(String args[]) { X ob = new X(); ob.count = 10;. Нет. Закрытый (private) член недоступен за пределами своего класса.

Модификатор доступа должен объявлению члена класса. предшествовать

Помимо очереди, в программах часто используется структура данных, которая называется стеком. Обращение к стеку осуществляется по принципу “первым пришел — последним обслужен“. Стек можно сравнить со стопкой тарелок, стоящих на столе. Последней берется тарелка, поставленная на стол первой. Создайте класс Stack, реализующий стек для хранения символов. Используйте методы push () и pop () для манипулирования содержимым стека. Пользователь класса Stack должен иметь возможность задавать размер стека при его создании. Все члены класса Stack, кроме методов push () и pop (), должны быть объявлены как private. (Подсказка: в качестве заготовки можете воспользоваться классом Queue, изменив в нем лишь способ доступа к данным.) // Класс, реализующий стек для хранения символов, class Stack { private char stck[]; // Массив для хранения элементов стека private int tos; // Вершина стека. // построить пустой стек заданного размера Stack(int size) { stck = new char[size]; // выделить память для стека tos = 0; } // построить один стек из другого стека Stack(Stack ob) { tos = ob.tos; stck = new char[ob.stck.length]; // скопировать элементы for(int i=0; i < tos; i++) stck[i] = ob.stck[i]; } // построить стек с исходными значениями Stack(char а[]) { stck = new char[a.length]; for(int i = 0; i < a.length; i++) { push(a[i]); } } // поместить символы в стек void push(char ch) { if(tos==stck.length) { System.out.println(" — Stack is full."); return; } stck[tos] = ch; tos++; } // извлечь символы из стека char pop() { if(tos==0) { System.out.println(" — Stack is empty."); return (char) 0; } tos—; return stck[tos]; } } // продемонстрировать применение класса Stack class SDemo { public static void main(String args[]) { // создать пустой стек на 10 элементов Stack stkl = new Stack(lO); char name[] = {'T1, 'o', 'm'}; // построить стек из массива Stack stk2 = new Stack(name); char ch; int i; // поместить символы в стек stkl for(i=0; i < 10; i++) stkl.push((char) ('A' + i)); // построить один стек из другого стека Stack stk3 = new Stack(stkl); // отобразить стеки System.out.print("Contents of stkl: "); for(i=0; i < 10; i++) { ch = stkl.pop(); System.out.print(ch); } System.out.println("\n"); System.out.print("Contents of stk2: "); for(i=0; i < 3; i++) { ch = stk2.pop(); System.out.print(ch); } System.out.println("\n"); System.out.print("Contents of stk3: "); for(i=0; i < 10; i++) { ch = stk3.pop(); System.out.print(ch); } } } Ниже приведен результат выполнения данной программы. Contents of stkl: JIHGFEDCBA Contents of stk2: moT Contents of stk3: JIHGFEDCBA