Досрочный return в Java
После того, как выполнится инструкция
return, метод закончит свою работу.
То есть после выполнения return больше
никакой код не выполнится.
В Java команду после return в том же
блоке компилятор считает недостижимой,
и такой класс не соберется. Поэтому после
return код не пишут:
public class Main {
static int func(int num) {
return num * num;
}
public static void main(String[] args) {
int res = func(3);
System.out.println(res); // выведет 9
}
}
Это не значит, что в методе должен быть один
return. Но выполнится только один из них.
В следующем примере в зависимости от значения
параметра выполнится либо первый, либо второй
return:
public class Main {
static String func(int num) {
if (num >= 0) {
return "+";
} else {
return "-";
}
}
public static void main(String[] args) {
System.out.println(func(3)); // выведет '+'
System.out.println(func(-3)); // выведет '-'
}
}
Пусть у нас есть метод, возвращающий сумму
чисел от 1 до 5:
public class Main {
static int func() {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
int res = func();
System.out.println(res); // выведет 15
}
}
Пусть теперь мы расположим return
внутри цикла, вот так:
public class Main {
static int func() {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
return sum;
}
return sum;
}
public static void main(String[] args) {
int res = func();
System.out.println(res); // выведет 1
}
}
В этом случае цикл прокрутится лишь одну
итерацию и произойдет автоматический выход
из метода, а заодно и из цикла. За одну
итерацию в переменной sum окажется
лишь число 1, а не вся нужная сумма.
Второй return нужен, чтобы метод
собрался: компилятор требует результат
на каждом пути.
То, что return расположен внутри цикла,
не всегда может быть ошибкой. В следующем
примере сделан метод, который определяет,
сколько первых элементов списка нужно сложить,
чтобы сумма стала больше или равна 10:
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
static int func(ArrayList<Integer> arr) {
int sum = 0;
for (int i = 0; i < arr.size(); i++) {
sum += arr.get(i);
// Если сумма больше или равна 10:
if (sum >= 10) {
return i + 1; // выходим из цикла и из метода
}
}
return 0;
}
public static void main(String[] args) {
ArrayList<Integer> arr = new ArrayList<>(
Arrays.asList(1, 2, 3, 4, 5)
);
int res = func(arr);
System.out.println(res); // выведет 4
}
}
А в следующем примере сделан метод, который
вычисляет, сколько целых чисел, начиная с
1, нужно сложить, чтобы результат
был больше 100:
public class Main {
static int func() {
int sum = 0;
int i = 1;
while (true) { // бесконечный цикл
sum += i;
if (sum >= 100) {
return i; // цикл крутится, пока не выйдет тут
}
i++;
}
}
public static void main(String[] args) {
System.out.println(func()); // выведет 14
}
}
Что выведется на экран в результате выполнения следующего кода:
public class Main {
static int func(int num) {
return num;
// return num * num; // сюда выполнение не дойдет
}
public static void main(String[] args) {
System.out.println(func(3));
}
}
Объясните почему.
Что выведет каждый из System.out.println
в результате выполнения следующего кода:
public class Main {
static int func(int num) {
if (num <= 0) {
return -num;
} else {
return num * num;
}
}
public static void main(String[] args) {
System.out.println(func(10));
System.out.println(func(-5));
}
}
Объясните почему.
Что выведет каждый из System.out.println
в результате выполнения следующего кода:
public class Main {
static int func(int num) {
if (num <= 0) {
return -num;
}
return num * num;
}
public static void main(String[] args) {
System.out.println(func(10));
System.out.println(func(-5));
}
}
Объясните почему.
Что выведется на экран в результате выполнения следующего кода:
public class Main {
static int func(int num) {
int sum = 0;
for (int i = 1; i <= num; i++) {
sum += i;
return sum;
}
return sum;
}
public static void main(String[] args) {
System.out.println(func(5));
}
}
Объясните почему.
Что хотел сделать автор данного кода? Исправьте ошибку автора.
Напишите метод, который параметром будет
принимать число и делить его на 2
столько раз, пока результат не станет меньше
10. Пусть метод возвращает количество
итераций, которое потребовалось для
достижения результата.