Spec-Zone .ru
спецификации, руководства, описания, API
|
break
Оператор break
у оператора есть две формы: маркированный и немаркированный. Вы видели немаркированную форму в предыдущем обсуждении switch
оператор. Можно также использовать немаркированный break
завершать a for
, while
, или do-while
цикл, как показано в следующем BreakDemo
программа:
class BreakDemo { public static void main(String[] args) { int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 }; int searchfor = 12; int i; boolean foundIt = false; for (i = 0; i < arrayOfInts.length; i++) { if (arrayOfInts[i] == searchfor) { foundIt = true; break; } } if (foundIt) { System.out.println("Found " + searchfor + " at index " + i); } else { System.out.println(searchfor + " not in the array"); } } }
Эта программа ищет номер 12 в массиве. break
оператор, показанный в полужирном стиле, завершается for
цикл, когда то значение находится. Поток управления тогда передает оператору после for
цикл. Вывод этой программы:
Found 12 at index 4
Немаркированный break
оператор завершает самое внутреннее switch
, for
, while
, или do-while
оператор, но маркированный break
завершает внешний оператор. Следующая программа, BreakWithLabelDemo
, подобно предыдущей программе, но использует вложенный for
циклы, чтобы искать значение в двумерном массиве. Когда значение находится, маркированный break
завершает внешнее for
цикл (маркированный "поиск"):
class BreakWithLabelDemo { public static void main(String[] args) { int[][] arrayOfInts = { { 32, 87, 3, 589 }, { 12, 1076, 2000, 8 }, { 622, 127, 77, 955 } }; int searchfor = 12; int i; int j = 0; boolean foundIt = false; search: for (i = 0; i < arrayOfInts.length; i++) { for (j = 0; j < arrayOfInts[i].length; j++) { if (arrayOfInts[i][j] == searchfor) { foundIt = true; break search; } } } if (foundIt) { System.out.println("Found " + searchfor + " at " + i + ", " + j); } else { System.out.println(searchfor + " not in the array"); } } }
Это - вывод программы.
Found 12 at 1, 0
break
оператор завершает помеченный оператор; это не передает поток управления к метке. Поток управления сразу передается оператору после маркированного (завершенного) оператора.
continue
Оператор continue
оператор пропускает текущую итерацию a for
, while
, или do-while
цикл. Немаркированная форма пропускает до конца тела самого внутреннего цикла и оценивает boolean
выражение, которое управляет циклом. Следующая программа, ContinueDemo
, шаги через a String
, подсчет происшествий буквы "p". Если текущий символ не является p, continue
оператор пропускает остальную часть цикла и продолжается к следующему символу. Если это - "p", программа постепенно увеличивает количество буквы.
class ContinueDemo { public static void main(String[] args) { String searchMe = "peter piper picked a " + "peck of pickled peppers"; int max = searchMe.length(); int numPs = 0; for (int i = 0; i < max; i++) { // interested only in p's if (searchMe.charAt(i) != 'p') continue; // process p's numPs++; } System.out.println("Found " + numPs + " p's in the string."); } }
Вот вывод этой программы:
Found 9 p's in the string.
Чтобы видеть этот эффект более ясно, попытайтесь удалить continue
оператор и перекомпиляция. Когда Вы выполните программу снова, количество будет неправильным, говоря, что это нашло 35 p's вместо 9.
Маркированный continue
оператор пропускает текущую итерацию внешнего цикла, отмеченного с данной меткой. Следующий пример программы, ContinueWithLabelDemo
, вложенные циклы использования, чтобы искать подстроку в пределах другой строки. Требуются два вложенных цикла: один, чтобы выполнить итерации по подстроке и один, чтобы выполнить итерации по искавшей строке. Следующая программа, ContinueWithLabelDemo
, использует маркированную форму, продолжают пропускать итерацию во внешнем цикле.
class ContinueWithLabelDemo { public static void main(String[] args) { String searchMe = "Look for a substring in me"; String substring = "sub"; boolean foundIt = false; int max = searchMe.length() - substring.length(); test: for (int i = 0; i <= max; i++) { int n = substring.length(); int j = i; int k = 0; while (n-- != 0) { if (searchMe.charAt(j++) != substring.charAt(k++)) { continue test; } } foundIt = true; break test; } System.out.println(foundIt ? "Found it" : "Didn't find it"); } }
Вот вывод из этой программы.
Found it
return
ОператорПоследний из переходящих операторов return
оператор. return
оператор выходит от текущего метода, и возвратов потока управления туда, где метод был вызван. return
у оператора есть две формы: тот, который возвращает значение, и тот, который не делает. Чтобы возвратить значение, просто поместите значение (или выражение, которое вычисляет значение) после return
ключевое слово.
return ++count;
Тип данных возвращенного значения должен соответствовать тип объявленного возвращаемого значения метода. Когда метод объявляется void
, используйте форму return
это не возвращает значение.
return;
Урок Классов и Объектов покроет все, что Вы должны знать о методах записи.