Java: руководство для начинающих (ЛП) - Шилдт Герберт
Шрифт:
Интервал:
Закладка:
Может ли конструктор иметь один или несколько параметров?Да, может.
Если метод не возвращает значения, то как следует объявить тип этого метода?Как void.Глава 5. Дополнительные сведения
о типах данных и операторах
Покажите два способа объявления одномерного массива, состоящего из 12 элементов типа double.double х[] = new double[12];doublet] x = new double[12];
Покажите, как инициализировать одномерный массив целочисленными значениями от 1 до 5.int х[] = { 1, 2, 3, 4, 5 };
Напишите программу, в которой массив используется для нахождения среднегоарифметического десяти значений типа double. Используйте любые десять чисел.// Среднее арифметическое 10 значений типа double,class Avg {public static void main(String args[]) {double nums[] = { 1.1, 2.2, 3.3, 4.4, 5.5,6.6, 7.7, 8.8, 9.9, 10.1 };double sum = 0;for(int i=0; i < nums.length; i++)sum += nums[i];System.out.println("Average: " + sum / nums.length);}}
Измените программу, созданную в примере для опробования 5.1, таким образрм,чтобы она сортировала массив символьных строк. Продемонстрируйте ее работоспособность.// Демонстрация пузырьковой сортировки строк,class StrBubble {public static void main(String args[]) {String strs[] = {"this", "is", "a", "test","of", "a", "string", "sort"};int a, b;String t;int size;size = strs.length; // Количество сортируемых элементов// отобразить исходный массивSystem.out.print("Original array is:");for (int i=0; i < size; i++)System.out.print(" " + strs[i]);System.out.println();// Пузырьковая сортировка строк.for(a=l; a < size; a++)for(b=size-l; b >= a; b—) {// поменять элементы местами при нарушении порядка их следованияif(strs[b—1].compareTo(strs[b]) > 0) {t = strs[b-1];strs[b-l] = strs[b];strs[b] = t;}}// отобразить отсортированный массивSystem.out.print("Sorted array is:");for (int i=0; i < size; i++)System.out.print(" " + strs[i]);System.out.println();}}
В чем отличие методов indexOf () и lastIndexOf () из класса String?Метод indexOf () находит первое вхождение указанной подстроки, а методlastlndexOf () — ее последнее вхождение в текущей символьной строке.
Все символьные строки являются объектами типа String. Покажите, как вызываются методы length () и charAt () для строкового литерала ”1 like Java" (Мненравится Java).Как ни странно, приведенный ниже вызов метода length () вполне допустим.System.out.println("I like Java".length());В результате этого вызова на экран выводится значение 11. Аналогичным образомвызывается и метод charAt ().
Расширьте класс Encode таким образом, чтобы в качестве ключа шифрования использовалась строка из восьми символов.Приложение А. Ответы на вопросы для самопроверки 565// Видоизмененный способ шифрования и дешифрования сообщений// с помощью операции поразрядного исключающего ИЛИ.class Encode {public static void main(String args[]) {String msg = "This is a test";String encmsg = "";String decmsg = "";String key = "abcdefgi";int j;System.out.print("Original message: ");System.out.println(msg);// зашифровать сообщениеj = 0;for(int i=0; i < msg.length(); i++) {encmsg = encmsg + (char) (msg.charAt(i) A key.charAt(j));j++;if(j==8) j = 0;}System.out.print("Encoded message: ");System.out.println(encmsg);// дешифровать сообщениеj = 0;for(int i=0; i < msg.length(); i++) {decmsg = decmsg + (char) (encmsg.charAt(i) л key.charAt(j));j++;if(j==8) j = 0;}«System.out.print("Decoded message: ");System.out.println(decmsg);}}
Можно ли применять поразрядные операторы к значениям типа double?Нет, нельзя.
Перепишите приведенную ниже последовательность операторов, воспользовавшисьоператором ?.if(х < 0) у = 10;else у = 20;Ответ:у = х < 0 ? 10 : 20;
В приведенном ниже фрагменте кода содержится знак &. Какой оператор он обозначает: поразрядный или логический? Обоснуйте свой ответ.boolean а, Ь;// ...if(а & Ь) ...Это логический оператор, поскольку оба его операнда относятся к типу boolean.
Является ли ошибкой превышение верхней границы массива?Да.Является ли ошибкой использование отрицательных значений для доступа к элементам массива?Да. Значения индексов массива начинаются с нуля.
Как обозначается оператор сдвига вправо без знака?»>
Перепишите рассмотренный ранее в этой главе класс 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];}}// продемонстрировать применение класса Stackclass 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;// поместить символы в стек stklfor(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: JIHGFEDCBAContents of stk2: moTContents of stk3: JIHGFEDCBA