Java: руководство для начинающих (ЛП) - Шилдт Герберт
Шрифт:
Интервал:
Закладка:
Выполнение этой программы дает следующий результат:Value is: 1Value is: 2Value is: 3Value is: 4Value is: 5Value is: 2Value is: 4Value is: 6Value is: 8Value is: 10Value is: 3Value is: 6Value is: 9Value is: 12Value is: 15Summation: 90
Обратите особое внимание на следующую строку кода:for(int х[] : nums) {
Не упустите из виду и то, как объявляется переменная х. Она представляет собой ссылку на одномерный целочисленный массив. Это очень важно, поскольку на каждом шаге цикла for из двумерного массива nums извлекается очередной массив, начиная с nums [0]. А во внутреннем цикле for перебираются элементы полученного массива и отображаются их значения.Применение расширенного цикла for
Разновидность for-each цикла for обеспечивает лишь последовательный перебор элементов от начала до конца массива, поэтому может создаться впечатление, будто такой цикл имеет ограниченное применение. Но это совсем не так. Данный механизм циклического обращения применяется в самых разных алгоритмах. Один из самых характерных тому примеров — организация поиска. В приведенном ниже примере программы расширенный цикл for используется для поиска значения в неотсортированном массиве. Выполнение цикла прерывается, если искомый элемент найден.// Поиск в массиве с использованием разновидности for-each цикла for.class Search { public static void main(String args[]) { int nums[] = { 6, 8, 3, 7, 5, 6, 1, 4 }; int val = 5; boolean found = false; // использовать разновидность for-each цикла for // для поиска значения переменной val в массиве nums for(int х : nums) { if (x == val) { found = true; break; } } if(found) System.out.println("Value found!"); }}
В данном случае применение расширенного цикла for вполне оправданно, поскольку найти значение в неотсортированном массиве можно лишь, перебрав все его элементы. (Если бы содержимое массива было предварительно отсортировано, то лучше было бы применить более эффективный алгоритм поиска, например поиск методом дихотомии. В этом случае пришлось бы использовать другой массив.) Расширенным циклом for удобно также пользоваться для расчета среднего значения, нахождения минимального и максимального элементов множества, выявления дублирующихся значений и т.д.
Теперь, когда разновидность for-each цикла for представлена в достаточной степени, она будет еще не раз использоваться там, где это уместно, в примерах программ, представленных в остальной части книги.Символьные строки
В повседневной работе каждый программист обязательно встречается с объектами типа String. Объект типа String определяет символьную строку и поддерживает операции над ней. Во многих языках программирования символьная строка — это лишь массив символов, но в Java это совсем не так, где символьная строка, по существу, является объектом.
Возможно, вы и не заметили, но класс String фактически уже использовался в примерах программ, начиная с главы 1. При создании строкового литерала на самом деле строился объект типа String. Рассмотрим приведенный ниже оператор.System.out.println("In Java, strings are objects.");
Наличие в нем символьной строки "In Java, strings are objects." (B Java строки являются объектами) автоматически приводит к созданию объекта типа String. Таким образом, класс String незримо присутствовал в предыдущих примерах программ. В последующих разделах будет показано, как этим классом пользоваться явным образом. Однако в классе String предусмотрен обширный ряд методов, поэтому здесь будут рассмотрены лишь некоторые из них. Большую часть функциональных возможностей класса String вам предстоит изучить самостоятельно.Построение строк
Объекты типа String создаются таким же образом, как и объекты других типов. Для этой цели используется конструктор, как показано в следующем примере:String str = new String("Hello");
В данном примере создается объект str типа String, содержащий символьную строку "Hello" (Привет). Объект типа String можно создать и на основе другого объекта такого же типа. Например:String str = new String("Hello");String str2 = new String(str);
После выполнения этих строк кода объект str2 будет также содержать символьную строку "Hello".
Ниже представлен еще один способ создания объекта типа String.String str = "Java strings are powerful.";
В данном случае объект str инициализируется последовательностью символов "Java strings are powerful." (Строки в Java эффективны).
Создав объект типа String, можете использовать его везде, где допускается строковый литерал (последовательность символов, заключенная в кавычки). Например, объект типа String можно передать в качестве параметра методу println () при его вызове, как показано в приведенном ниже примере программы.// Представление класса String,class StringDemo { public static void main(String args[]) { // объявить символьные строки разными способами String strl = new String("Java strings are objects."); String str2 = "They are constructed various ways."; String str3 = new String(str2); System.out.println(strl) ; System.out.println(str2) ; System.out.println(str3) ; }}
Выполнение этой программы дает следующий результат:Java strings are objects.They are constructed various ways.They are constructed various ways.Операции над символьными строками
Класс String содержит ряд методов, предназначенных для выполнения действий над символьными строками. Ниже описаны некоторые из них.boolean equals (str)Возвращает логическое значение true, если текущая строкасодержит ту же последовательность символов, что и параметр strint length ()Возвращает длину символьной строкиchar charAt (index)Возвращает символ, находящийся в строке на позиции, указываемой параметром indexint compareTo (String str)Возвращает отрицательное значение, если текущая строкаменьше строки str, нуль, если эти строки равны, и положительное значение, если текущая строка больше строки strint indexOf (String str)Производит в текущей строке поиск подстроки, определяемой параметром str. Возвращает индекс первого вхождения подстроки str или -1, если поиск завершается неудачноint lastlndexOf (String str)Производит в текущей строке поиск подстроки, определяемойпараметром str. Возвращает индекс последнего вхожденияподстроки str или -1, если поиск завершается неудачно
В приведенном ниже примере программы демонстрируется применение перечисленных выше методов, оперирующих символьными строками.// Некоторые операции над символьными строками,class StrOps { public static void main(String args[]) { String strl = "When it comes to Web programming, Java is #1."; String str2 = new String(strl); String str3 = "Java strings are powerful."; int result, idx; char ch; System.out.println("Length of strl: " + strl.length()); // отобразить строку strl посимвольно, for(int i=0; i < strl.length(); i++) System.out.print(strl.charAt(i)); System.out.println(); if (strl.equals(str2) ) System.out.println("strl equals str2"); else System.out.println("strl does not equal str2"); if(strl.equals(str3)) System.out.println("strl equals str3"); else System.out.println("strl does not equal str3"); result = strl.compareTo(str3); if (result == 0) System.out.println("strl and str3 are equal"); else if(result < 0) System.out.println("strl is less than str3"); else System.out.println("strl is greater than str3"); // присвоить переменной str2 новую строку str2 = "One Two Three One"; idx = str2.indexOf("One"); System.out.println("Index of first occurrence of One: " + idx); idx = str2.lastlndexOf("One"); System.out.println("Index of last occurrence of One: " + idx); }}
Выполнение этой программы дает следующий результат:Length of strl: 45When it comes to Web programming, Java is #1.strl equals str2strl does not equal str3strl is greater than str3Index of first occurrence of One: 0Index of last occurrence of One: 14