Hello! Dina iki kita bakal ngomong babagan operator lompat ing Jawa:
return
break
continue
goto
if
) lan puteran ( for
, while
lsp.). Saliyane kontrol konstruksi, eksekusi linear program bisa diowahi kanthi pernyataan lompat. Dheweke tanggung jawab kanggo ngarahake eksekusi program menyang lokasi tartamtu, sing gumantung saka konteks lan statement tartamtu. Ayo padha nliti saben papat operator kasebut.
bali
Operator iki sing paling kerep dadi kenal karo wong anyar. Pernyataan kasebutreturn
mungkasi metode sing diarani, lan eksekusi program bali menyang lokasi sing diarani metode kasebut. Wis return
rong wangun:
- Langsung mungkasi eksekusi metode kasebut.
- Langsung mungkasi eksekusi metode kasebut lan ngasilake sawetara nilai minangka asil saka metode kasebut.
return;
return value; // где value — некоторое возвращаемое meaning
Metode sing ngasilake regane kudu paling sethithik siji operator return
kanthi nilai bali sing dijamin bisa diarani, lan ora kudu duwe operator return
tanpa nilai bali. Ayo deleng conto ing ngisor iki:
public int sum(int a, int b) {
return a + b;
}
public String getGreetings(String name) {
return "Hello " + name;
}
public int max(int x, int y) {
if (x > y) {
return x;
} else {
return y;
}
}
Ing cara sing ora ngasilake nilai (metode void
), ditrima, nanging ora dibutuhake, paling ora ana siji statement return
tanpa nilai bali, lan ora ana siji statement return
kanthi nilai bali. Ayo ndeleng iki nganggo conto ing ngisor iki:
public void print(String s) {
// наличие return в void методах не обязательно
System.out.println(s);
}
//Метод выведет в консоль число, если оно нечетное
public void printIfOdd(int number) {
if (number % 2 == 0) {
// Если число четное, метод завершит свою работу
// Наличие return в void методах опционально
return;
}
System.out.println(number);
}
// Метод выведет в консоль наибольшее meaning из массива
private void printMaxInArray(int[] array) {
if (array == null || array.length == 0) {
/*
Если массив пуст, метод завершит свою работу.
Иногда полезно проверять подобным образом аргументы метода вначале и прерывать выполнение метода, если аргументы не подходят для дальнейшей корректной работы
*/
System.out.println("Empty array");
return;
}
int max = array[1];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}
System.out.println(max);
}
label
Sadurunge ndelengbreak
lan operator continue
, aku pengin ngomong babagan label ing Jawa. Iki penting amarga ing sawetara kahanan, break
lan operator continue
digunakake bebarengan karo label. Nanging pisanan, coba jawab pitakon apa kode iki bakal dikompilasi:
public static void main(String[] args) {
https://www.google.com/
System.out.println("Interesting...");
}
Label minangka potongan kode sing dijenengi. Label kasebut dhewe ora nyedhiyakake fungsi apa wae. Iki kaya tetenger ing kode sing arep dienggo programer mengko. Label ing kode ditetepake kanthi gampang - liwat jeneng lan titik loro. Tuladhane:
labelName:
outerLoop:
printing:
anyWordYouLike:
public static void main(String[] args) {
definePrintName:
System.out.println("Таблица Умножения");
loop1:
for (int i = 1; i <= 10; i++) {
loop2:
for (int j = 1; j <= 10; j++) {
System.out.printf("%4d", i * j);
}
System.out.println();
}
}
Output saka metode kasebut main
bakal kaya ing ngisor iki:
Таблица Умножения
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
Process finished with exit code 0
Ing conto ing ndhuwur definePrintName
, loop1:
lan loop2:
minangka label. loop1:
lan loop2:
"tandha" rong siklus - njaba lan internal. Kita bakal ndeleng nggunakake label ing bagean ing ngisor iki. Ing sawetoro wektu, yen sampeyan mangsuli "ora" kanggo pitakonan apa kode iki bakal dikompilasi:
public static void main(String[] args) {
https://www.google.com/
System.out.println("Interesting...");
}
Coba jawab maneh, nggunakake IDE.
putus
Operatorbreak
digunakake ing rong kasus:
- Kanggo ngrampungake cabang eksekusi ing blok switch-case.
- Kanggo ngganggu eksekusi loop.
break labelName; // Синтаксис оператора с меткой
break; // Синтаксис оператора без метки
Ing blok switch-case, operator break
digunakake tanpa label:
public static void main(String[] args) {
int dayOfWeekInt = 4;
String dayOfWeek;
switch (dayOfWeekInt) {
case 1:
dayOfWeek = "Monday";
break;
case 2:
dayOfWeek = "Tuesday";
break;
case 3:
dayOfWeek = "Wednesday";
break;
case 4:
dayOfWeek = "Thursday";
break;
case 5:
dayOfWeek = "Friday";
break;
case 6:
dayOfWeek = "Saturday";
break;
case 7:
dayOfWeek = "Sunday";
break;
default:
dayOfWeek = "Неизвестный день";
break;
}
System.out.println("Сегодня " + dayOfWeek);
}
Ing puteran, statement break
digunakake kanggo ngganggu pengulangan luwih sawise kondisi tartamtu ketemu. Iki bisa asring ditemokake nalika sampeyan kudu ngulang liwat array utawa koleksi unsur lan nemokake sawetara unsur sing nyukupi kahanan sing dibutuhake. Ayo dipikirake conto iki. Kita duwe array lan kita kudu nemtokake manawa array kasebut ngemot unsur negatif:
int a[] = {1,2,234,-123,12,-2,312,0,412,433};
boolean arrayHasNegativeElements = false;
for (int i = 0; i < a.length; i++) {
if (a[i] < 0) {
/*
Как только найдется
хотя бы один отрицательный элемент,
мы прервем цикл с помощью
оператора break, потому что
мы выяснor то, что нас интересовало,
и дальнейший перебор элементов не имеет смысла.
*/
arrayHasNegativeElements = true;
break;
}
}
Ayo goleki conto sing padha karo puteran sing beda. Sepeda; Pit; ontel for-each
:
public static void main(String[] args) {
int a[] = {1,2,234,-123,12,-2,312,0,412,433};
boolean arrayHasNegativeElements = false;
for (int number : a) {
if (number < 0) {
arrayHasNegativeElements = true;
break;
}
}
}
Sepeda; Pit; ontel while
:
public static void main(String[] args) {
int a[] = {1,2,234,-123,12,-2,312,0,412,433};
boolean arrayHasNegativeElements = false;
int counter = 0;
while (counter < a.length) {
if (a[counter] < 0) {
arrayHasNegativeElements = true;
break;
}
counter ++;
}
}
Sepeda; Pit; ontel do-while
:
public static void main(String[] args) {
int a[] = {1,2,234,-123,12,-2,312,0,412,433};
boolean arrayHasNegativeElements = false;
int counter = 0;
do {
if (a[counter] < 0) {
arrayHasNegativeElements = true;
break;
}
counter ++;
} while (counter < a.length);
}
Conto liyane saka statement break
ing puteran yaiku ngganggu puteran tanpa wates nalika kondisi tartamtu wis ketemu. Iki minangka conto program sing nuduhake baris sing dilebokake pangguna nganti pangguna ngetik tembung "mandheg":
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line;
while (true) {
line = scanner.nextLine();
if ("stop".equals(line)){
/*
Прерываем бесконечный цикл,
при достижении
определенного условия
*/
break;
}
System.out.println("Пользователь ввел: " + line);
}
}
Ayo nimbang nggunakake operator break
bebarengan karo label. Interupsi karo label digunakake ing kasus karo sawetara siklus, liyane, nested siji ing liyane. Ing kasus iki, salah siji saka siklus (utawa kabeh siklus) ditandhani karo label. Sabanjure, operator, break
bebarengan karo nuduhake label, interrupts siklus sing dikarepake. Ayo nimbang conto sing kudu ngerti apa ana unsur negatif, nanging ora ing array, nanging ing matriks:
public static void main(String[] args) {
int[][] a = {
{1, 2, 3},
{-412, 12, 0},
{1223, 474, -54}
};
boolean hasNegative = false;
searchNegative:
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] < 0) {
/*
Если использовать break без метки,
тогда прервется вложенный цикл for,
но внешний продолжит выполнять свои итерации
и поиск продолжится.
Поэтому мы "помечаем" внешний цикл меткой `searchNegative`
и прерываем внешний цикл оператором break совместно с нужной меткой.
*/
hasNegative = true;
break searchNegative;
}
}
}
}
kesinambungan
Operatorcontinue
uga duwe rong wujud - kanthi lan tanpa label:
continue; // форма оператора без метки
continue labelName; // форма оператора с меткой
Ora kaya operator break
, sing ngganggu kabeh pengulangan sing isih ana, operator continue
ngganggu pengulangan saiki lan nyebabake sing sabanjure diwiwiti. Iki bisa migunani yen sampeyan kudu nindakake sawetara operasi ing unsur sing gawe marem kahanan tartamtu. Ayo kita duwe senar lan kita pengin ngetung jumlah tembung sing diwiwiti kanthi huruf "m":
public static void main(String[] args) {
String sentence = "Мама мыла раму";
String[] words = sentence.split(" ");
int mWordsCount = 0;
for (int i = 0; i < words.length; i++) {
if ( ! words[i].toLowerCase().startsWith("м")) {
/*
Если слово не начинается с буквы м,
то текущая итерация прервется и цикл
ПРОДОЛЖИТ выполнение со следующей итерации
*/
continue;
}
mWordsCount ++;
}
System.out.println("Кол-во слов, начинающихся с буквы М в предложении: " + "[" + sentence + "] = " + mWordsCount);
}
Sawise nglakokake kode iki bakal ana output ing console:
Кол-во слов, начинающихся с буквы М в предложении: [Мама мыла раму] = 2
Operator continue
bebarengan karo label uga digunakake nalika iterasi liwat unsur. Ayo mbayangno matriks sing kudu ngetung jumlah larik kanthi unsur negatif:
public static void main(String[] args) {
int[][] a = {
{1, 23, -1, 23, -12},
{21, 21, 0, 23, 123, 45},
{123, 3},
{123, -5, 4, -3},
{-1, -2, -3}
};
int rowsWithNegativeElementsCount = 0;
rowsLoop:
// Проходим по каждой строке
for (int[] arr : a) {
for (int number : arr) {
if (number < 0) {
/*
Если в текущей строке найдется
хотя бы 1 отрицательный элемент,
тогда мы увеличим переменную счетчик,
и с помощью оператора continue rowsLoop
прервем текущую итерацию внешнего цикла и
принудительно начнем следующую
*/
rowsWithNegativeElementsCount ++;
continue rowsLoop;
}
}
}
System.out.println("Rows With Negative Elements Count = " + rowsWithNegativeElementsCount);
}
Output saka kode iki bakal dadi:
Rows With Negative Elements Count = 3
Iku worth ngomong sing operator break
, continue
lan return
bisa digunakake ing macem-macem cara kanggo entuk fungsi padha. Dadi, sampeyan bisa nulis ulang conto pungkasan lan continue
gunakake break
:
public static void main(String[] args) {
int[][] a = {
{1, 23, -1, 23, -12},
{21, 21, 0, 23, 123, 45},
{123, 3},
{123, -5, 4, -3},
{-1, -2, -3}
};
int rowsWithNegativeElementsCount = 0;
for (int[] arr : a) {
for (int number : arr) {
if (number < 0) {
rowsWithNegativeElementsCount ++;
break;
}
}
}
System.out.println("Rows With Negative Elements Count = " + rowsWithNegativeElementsCount);
}
Bentenipun antarane break
lan continue
karo label iku apa break
jangkep iterasi saka daur ulang kang ditulis. Lan continue
karo label, skip pengulangan saiki saka siklus ditandhani karo label. Ing sawetara kahanan, sampeyan bisa ngganti siji karo liyane, lan kabeh ing fungsi saka program bakal tetep padha. Kita bakal ngomong babagan apa sing paling apik kanggo dipilih (spoiler: keterbacaan kode) ing ngisor iki. Operator break
bisa diganti ora mung karo continue
label, nanging uga karo return
. Sadurunge iki, sampeyan kudu mindhah loop nested menyang cara sing kapisah:
public static void main(String[] args) {
int[][] a = {
{1, 23, -1, 23, -12},
{21, 21, 0, 23, 123, 45},
{123, 3},
{123, -5, 4, -3},
{-1, -2, -3}
};
int rowsWithNegativeElementsCount = 0;
for (int[] arr : a) {
if (arrayHasNegativeElements(arr)) {
rowsWithNegativeElementsCount ++;
}
}
System.out.println("Rows With Negative Elements Count = " + rowsWithNegativeElementsCount);
}
static boolean arrayHasNegativeElements(int[] array) {
for (int number : array) {
if (number < 0) {
return true;
}
}
return false;
}
Akeh cara kanggo nulis bab sing padha. Kang siji kanggo milih? Ing program industri, masalah iki diputusake kanthi gampang ngerti kode kasebut. Sing luwih gampang ditulis, luwih apik. Daur ulang sing luwih akeh, luwih angel ngerteni kode kasebut. Utamané yen puteran ditandhani karo label beda, kang digunakake ing interrupts lan terusan ( break
lan continue
). Yen bisa ora nggunakake tag, luwih becik nglakoni. Yen ora, coba nulis kanthi cetha lan apik.
goto
Ing sawetara basa pamrograman ana operatorgoto
. Biasane pangalihan eksekusi kode menyang sawetara bagean saka program sing ditandhani label. Ananging ing basa Jawa goto
, ana sing bisa ngomong, iya lan ora. Ayo dipikirake. Dhaptar tembung kunci ing basa Jawa kalebu tembung goto
. Nanging, statement iki ditandhani minangka ora digunakake. Kasunyatane yaiku James Gosling, sing nggawe basa Jawa, wiwitane kalebu dhukungan kanggo operator ing JVM goto
. Nanging, fitur iki banjur dipotong. Salah sawijining alasan yaiku blok kode sing ngemot operator goto
ora bisa diwaca kaya blok kode sing nindakake fungsi sing padha nanging tanpa goto
, nanging kanthi pendekatan alternatif ( break
, continue
, nyelehake blok kode ing metode). Ing kasunyatan, ana liyane, kayata:
- kangelan maca lan ngerti kode sing ngemot operator
goto
; - optimasi kode complicating kanggo compiler (lan kadhangkala malah mokal);
- nambah kemungkinan nggawe kesalahan subtle ing kode.
goto
bisa mlaku kanthi sukses. Nanging, programer ora nggunakake. Sampeyan bisa maca babagan alasan iki ing siji artikel babagan Habré . Nanging kenapa banjur ninggalake goto
ing dhaptar tembung reserved? Iku prasaja: kanggo masa depan. Yen, contone, variabel, metode, utawa kelas diarani , ing kode Jawa pangembang ing saindenging jagad goto
, yen pernyataan iki bali ing versi Jawa sing bakal teka, kabeh kode lawas bakal rusak. Kanggo ngindhari skenario kasebut, goto
tetep ana ing dhaptar tembung kunci Jawa, nanging ora nduweni fungsi. Mbok menawa goto
dheweke bakal bali menyang pangkat kita, nanging kemungkinan iki sithik.
Asil
Kita wis ndeleng macem-macem operator lompat ing Jawa:return
- completion saka cara, bali Nilai saka cara.- kanthi nilai bali: cara sing ngasilake nilai;
- ora bali Nilai:
void
cara.
break
- gangguan saka siklus, pamblokiran ngalih-kasus.- kanthi tag: siklus saka macem-macem nesting;
- tanpa label: cabang switch-case saka blok; interrupting loop kang diarani.
continue
.- kanthi tag: siklus saka macem-macem nesting;
- tanpa labels: tutugan saka daur ulang kang diarani.
goto
.- ana ing dhaptar tembung kunci, nanging ora digunakake.
GO TO FULL VERSION