Меню сайта

Урок 6. Управление выполнением программы в Java ( 1 часть )

Управление в Java почти идентично средствам, используемым в Си C++.

Условныеоператоры

Они хорошо Вамзнакомы, давайте познакомимся с каждым из них в Java.

if-else

В обобщенной форме этот оператор записывается следующимобразом:

if (логическоевыражение) оператор1- [ else оператор2-]

Раздел else необязателен. Наместе любого из операторов может сто­ять составной оператор,заключенный в фигурные скобки. Логическое выражение — это любоевыражение, возвращающее значение типа boolean.

intbytesAvailable-

//…

if(bytesAvailable &gt- 0) {

ProcessData()-

bytesAvailable-= n-

}else

waitForMoreData()-

А вот полная программа, в которой для определения, к какомувремени года относится тот или иной месяц, используются операторы if-else.

classIfElse {

publicstatic void main(String args[]) { int month = 4-

Stringseason-

if(month == 12 || month == 1 || month == 2) {

season= «Winter»-

}else if (month ==3 || month == 4 || month == 5) {

season= «Spring»-

}else if (month == 6 || month == 7 || month == 8) {

season= «Summer»-

}else if (month == 9 || month == 10 || month == 11) {

season= «Autumn»-

}else {

season= «Bogus Month»-

}

System.out.println(«April is in the » + season +».»)-

}}

После выполнения программы вы должны получить следующийре­зультат:

С: &#92-&gt- java IfElse

Aprilis in the Spring.

break

В языке Java отсутствуетоператор goto. Для того, чтобы в некоторых случаях заменять goto, в Java предусмотрен операторbreak. Этот оператор сообщает исполняющей среде, что следует прекратить выполнение именованногоблока и пере­дать управление оператору, следующему за данным блоком. Дляимено­вания блоков в языке Java используются метки. Оператор break при работе сциклами и в операторах switch может использоваться без метки. В таком случаеподразумевается выход из текущего блока.

Например, в следующей программе имеется три вложенныхблока, и у каждого своя уникальная метка. Оператор break, стоящий во внутреннемблоке, вызывает переход на оператор, следующий за бло­ком b. При этомпропускаются два оператора println.

classBreak {

publicstatic void main(String args[]) { boolean t = true-

a: { b: { c: {

System.out.println(«Beforethe break»)- // Перед break

if (t)

break b-

System.out.println(«This won’texecute»)- // He будет выполнено}

System.out.println(«This won’t execute»)-// He будет выполнено }

System.out.println(«This is after b»)-//После b

}} }

В результате исполнения программы вы получите следующий резуль­тат:

С:&#92-&gt- Java Break

Beforethe break

Thisis after b

ВНИМАНИЕ

Вы можете использоватьоператор break только для перехода за один из текущих вложенных блоков. Этоотличает break от оператора goto языка С, для которого возможны переходы напроизвольные метки.

switch

Оператор switch обеспечивает ясный способ переключениямежду раз­личными частями программного кода в зависимости от значения однойпеременной или выражения. Общая форма этого оператора такова:

switch (выражение ) { case значение1:

break-

caseзначение2:

break-

caseзначением:

break-

default:

}

Результатом вычислениявыражения может быть значение любого простого типа, при этом каждое иззначений, указанных в операторах case, должно быть совместимо по типу свыражением в операторе switch. Все эти значения должны быть уникальнымилитералами. Если же вы укажете в двух операторах case одинаковые значения,транслятор выдаст сообщение об ошибке.

Если же значению выражения не соответ­ствует ни один
изоператоров case, управление передается коду, распо­ложенному после ключевогослова default. Отметим, что оператор default необязателен. В случае, когда ниодин из операторов case не соответст­вует значению выражения и в switchотсутствует оператор default вы­полнение программы продолжается с оператора,следующего за операто­ром switch.

Внутри оператора switch (а также внутри циклическихконструкций, но об этом — позже) break без метки при­водит к передаче управленияна код, стоящий после оператора switch. Если break отсутствует, после текущегораздела case будет выполняться следующий. Иногда бы­вает удобно иметь воператоре switch несколько смежных разделов case, не разделенных операторомbreak.

classSwitchSeason { public static void main(String args[]) {

intmonth = 4-

Stringseason-

switch(month) {

case12: // FALLSTHROUGH

case1: // FALLSTHROUGH

case2:

season= «Winter»-

break-

case3: // FALLSTHROUGH

case4: // FALLSTHROUGH

case5:

season= «Spring»-

break-

case6: // FALLSTHROUGH

case7: // FALLSTHROUGH

case8:

season= «Summer»-

break-

case9: // FALLSTHROUGH

case10: // FALLSTHROUGH

case11:

season= «Autumn»-

break-

default:

season= «Bogus Month»-

}

System.out.println(«Aprilis in the » + season + «.»)-

}}

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

classWordCount {

staticString text = «Now is the tifne&#92-n» +

«for all good men&#92-n»+

«to come to the aid&#92-n»+

«of theircountry&#92-n»+

«and pay their duetaxes&#92-n»-

staticint len = text.length()-

publicstatic void main(String args[]) {

booleaninWord = false-

intnumChars = 0-

intnumWords = 0-

intnumLines = 0-

for(int i=0- i &lt- len- i++) {

char с =text.charAt(i)-

numChars++-

switch (с) {

case ‘&#92-n’: numLines++- //FALLSTHROUGH

case ‘&#92-t’: // FALLSTHROUGH

case ‘ ‘ : if (inWord) {

numWords++-

inWord =false-

}

break-

default: inWord =true-

}

}

System.out.println(«&#92-t»+ numLines +»&#92-t» + numWords + «&#92-t» + numChars)-

}}

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

return

В следующей главе вы узнаете, что в Java дляреализации процедур­ного интерфейса к объектам классов используетсяразновидность подпро­грамм, называемых методами. Подпрограмма main, которую мыисполь­зовали до сих пор — это статический метод соответствующегокласса-примера. В любом месте программного кода метода можно поста­вить операторreturn, который приведет к немедленному завершению ра­боты и передаче управлениякоду, вызвавшему этот метод. Ниже при­веден пример, иллюстрирующий использованиеоператора return для немедленного возврата управления, в данном случае —исполняющей среде Java.

classReturnDemo {

publicstatic void main(String args[]) {

booleant = true-

System.out.println(«Beforethe return»)- //Перед оператором return

if(t) return-

System.out.println(«Thiswon’t execute»)- //Это не будет выполнено

}}

Замечание

Зачем в этом примереиспользован оператор if (t)? Дело в том, небудь это
го оператора, транслятор Java догадался бы, что последнийоператор println никогда не будет выполнен. Такие случаи в Java считаютсяошибками, поэтому без оператора if оттранслировать этот пример нам бы неудалось.

Категория: Обучение Java | Дата: 17.04.13

Меню раздела
Блок