Если метод имеет тип boolean какой вариант оператора return приведет к ошибке

@Description Тест по Java. Начальный уровень https://geekbrains.ru/tests/39 @Question Результат сравнения — это: @Options @OnlyOne @Key=2 Объект Логическое значение Строка Число Символ @Question Если метод имеет тип boolean, какой вариант оператора return приведет к ошибке: @Options @OnlyOne @Key=1 return (boolean)0; return Integer.valueOf(«10») < 15; return true && !false; return ‘a’ > 70; return 12 > 60; @Question Можно ли создать объект абстрактного класса: @Options @OnlyOne @Key=2 Да Нет @Question Что появится в конслоли в результате работы программы: <code> System.out.println(new[][] {{1, 2, 7}, {3, 4, 5}}[1][2]); </code> @Options @OnlyOne @Key=1 5 7 Ошибка компиляции Ошибка времени исполнения 2 @Question Можно ли наследоваться от класса java.lang.String: @Options @OnlyOne @Key=1 Нет Да @Question Операторы сравнения <, >, <=, >= применимы для: @Options @OnlyOne @Key=3 Строк Функций Чисел Объектов Логических переменных @Question Какой из типов данных является ссылочным (объектным)? @Options @OnlyOne @Key=2 long String boolean double int @Question Какие виды циклов существуют в Java? @Options @OnlyOne @Key=1 for, for-each, while, do-while for-each, while for-each, do-while for, while for, for-each, while @Question Укажите список типов данных, которые позволяют хранить только целые числа: @Options @OnlyOne @Key=5 byte, short, int, long, float, double int, long, float, double float, double boolean, byte, short, int, long byte, short, int, long @Question Какой цикл имеет инициализатор, условие и шаг? @Options @OnlyOne @Key=5 Infinite loop do-while for-each while for @Question Сколько измерений будет у массива … arr = {{{1,2},{3,4}},{{5,6},{7,8}}}; @Options @OnlyOne @Key=3 2 4 3 1 @Question Какие категории типов данных поддерживаются в Java? @Options @OnlyOne @Key=4 Примитивные Переменные, примитивные Ссылочные (объектные) Примитивные, ссылочные (объектные) Переменные, постоянные @Question Какие типы данных не могут быть в качестве условия switch-case: @Options @OnlyOne @Key=1 Дробные числа Строки Символы Целые числа @Question Может ли быть значение статического поля у объектов одного класса разным: @Options @OnlyOne @Key=1 Нет Да @Question Являются ли два метода перегруженными, если у них одинаковые имена, разный набор аргументов и разный тип возвращаемого значения: @Options @OnlyOne @Key=2 Нет Да @Question Остановит ли когда-нибудь свою работу цикл вида: <code> for(int i = 10; i > 0; i++){} </code> @Options @OnlyOne @Key=2 Ошибка времени исполнения Да Нет Ошибка компиляции @Question Может ли в одном классе объявлено больше одного метода с именем main: @Options @OnlyOne @Key=2 Нет Да @Question Инициализированная переменная в Java имеет: @Options @OnlyOne @Key=3 Тип, первоначальное значение Имя Тип, имя, первоначальное значение Тип, имя Имя, первоначальное значение @Question Какой оператор нужен в выражении 5…5, чтобы оно стало истиным? @Options @OnlyOne @Key=3 > < <= != = @Question Чем инициализируется по умолчанию локальная переменная ссылочного типа данных: @Options @OnlyOne @Key=2 Объектом, созданным с помощью конструктора по умолчанию Локальная переменные не инициализируются по умолчанию Null Зависит от конкретного типа переменной 0 @Question Можно ли использовать оператор return в void методе: @Options @OnlyOne @Key=1 Да Нет @Question Возможно ли унаследовать класс от двух суперклассов (множественное наследование): @Options @OnlyOne @Key=2 Да Нет @Question Список типов, переменных которые могут хранить дробные числа: @Options @OnlyOne @Key=1 float, double byte, short, int, long, float, double char, byte, short, int, long byte, short, int, long int, long, float, double @Question Тернарным логическим оператором является: @Options @OnlyOne @Key=3 ^ || ? : ! && @Question Какое значение будет сохранено в строку s? <code> String s = «value = » + 2 + 2; </code> @Options @OnlyOne @Key=2 «value = 2 + 2» «value = 22» Ошибка компиляции «value = 4» «value = 2 2» @Question Экземпляр класса String напрямую нельзя создать из: @Options @OnlyOne @Key=5 Строкового литерала Массива символов Экземпляра класса StringBuffer Экземпляра класса StringBuilder Массив строк @Question Как узнать количество элементов в массиве: int[] arr = new int[10]? @Options @OnlyOne @Key=1 arr.length size(arr) arr.size() length(arr) arr.length() @Question Что появится в консоли в результате работы программы: <code> byte a = 127; a++; System.out.println(a); </code> @Options @OnlyOne @Key=5 0 Ошибка времени исполнения 127 128 -128 @Question Какой вариант объявления массива некорректен: @Options @OnlyOne @Key=2 int c[][] = {{1, 2}, {3, 4}}; int e[5] = {1, 2, 3, 4, 5} int b[][] = new int [5][]; int[] a = new int[5]; @Question Для массива в Java верно: @Options @OnlyOne @Key=4 Изменяемый состав элементов одного типа Изменяемый состав элементов разных типов Фиксированное количество элементов разных типов Фиксированное количество элементов одного типа

In your method you must return a variable in each case (for each if statement), in this case, a boolean.

Example:

boolean checkHit2() {

  if (cx < 0 || cx >= 640) {return true;}
  if (cy < ground[(int)cx]) {return false;}
if (cx < blue + 15 && cx > blue - 15){
  score = (int)score + 1;
  return false;
}

Also, just to clean up your code a bit, the curly brackets are unneeded if the contents of the block is only one line. For example you can use:

boolean checkHit2() {

  if (cx < 0 || cx >= 640) return true;
  if (cy < ground[(int)cx]) return false;
if (cx < blue + 15 && cx > blue - 15){
  score = (int)score + 1;
  return false;
}

Functionally, they act the same. It’s just a useful shortcut to clean up your code :).

In this example i simply returned false because i’m insure of the functionality of your program or how you would like it to work. You could return a value based on a if or else statement, etc. but it’s up to you and what you want your program to do.

To see more about return, click here

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование «окончательной» модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

задан user2864740 26 July 2014 в 04:05

поделиться

10 ответов

Если вы поместите оператор return в оператор if, while или for, то он может или не может возвращать значение. Если он не войдет внутрь этого утверждения, тогда также этот метод должен вернуть некоторое значение (которое может быть нулевым). Чтобы убедиться, что компилятор заставит вас написать этот оператор return, который после if, while или for.

Но если вы пишете блок if / else и каждый из них возвращается в нем, тогда компилятор знает, что либо if, либо else получат выполнение, и метод вернет значение. Поэтому этот компилятор времени не заставит вас.

if(condition)
{
 return;
}
else
{
 return;
}

ответ дан Community 19 August 2018 в 03:50

поделиться

Попробуйте, как если бы if condition возвращает false, поэтому он будет возвращать пустой, иначе ничего не вернуться.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
return ""
}

Поскольку компилятор не знает, будет ли какой-либо из этих блоков if , поэтому он дает вам ошибку.

ответ дан bNd 19 August 2018 в 03:50

поделиться

Это потому, что если вы не пойдете в if, нет ничего, чтобы вернуться, поэтому он пропустит возвращение. :)

должно быть:

public String myMethod()
{
    if(condition)
    {
       return x;
    }
    return y;
}

ответ дан Clad Clad 19 August 2018 в 03:50

поделиться

Это незаконный синтаксис. Для вас необязательно возвращать переменную. Вы ДОЛЖНЫ возвращать переменную типа, указанного в вашем методе.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
}

Вы эффективно говорите: Я обещаю , любой класс может использовать этот метод (общедоступный), и я обещаю он всегда будет возвращать String (String).

Тогда вы говорите, что мое условие истинно, я верну x. Ну, это слишком плохо, в вашем обещании нет IF. Вы обещали, что myMethod ВСЕГДА вернет String. Даже если ваше условие ВСЕГДА истинно, компилятор должен предположить, что существует вероятность того, что он является ложным. Поэтому вам всегда нужно поместить возврат в конце вашего не-void-метода вне любых условий. JUST IN CASE все ваши условия терпят неудачу.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
  return ""; //or whatever the default behavior will be if all of your conditions fail to return.
}

ответ дан CodeCamper 19 August 2018 в 03:50

поделиться

Вы должны добавить оператор return, если condition является ложным.

public String myMethod() {
    if(condition) {
        return x;
    }

//  if condition is false you HAVE TO return a string
//  you could return a string, a empty string or null
    return otherCondition;  
}

FYI:

Oracle docs for return statement

ответ дан d3vnico 19 August 2018 в 03:50

поделиться

Это вернет строку , только если условие истинно.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
    else
       return "";
}

ответ дан Deepak Tiwari 19 August 2018 в 03:50

поделиться

Это потому, что функция должна вернуть значение. Представьте, что произойдет, если вы выполните myMethod(), и он не войдет в if(condition), что бы ваша функция вернулась? Компилятор должен знать, что нужно возвращать при каждом возможном выполнении вашей функции

Проверка документации по Java:

Определение: если декларация метода имеет тип возврата, тогда должно быть оператор возврата в конце метода. Если в операторе return нет ошибки, возвращаемой командой return.

Эта ошибка также возникает, если метод не имеет типа возврата и не был объявлен с использованием void (т. Е. Он был ошибочно опущен ).

Вы можете решить вашу проблему:

public String myMethod()
{
    String result = null;
    if(condition)
    {
       result = x;
    }
    return result;
}

ответ дан Guillermo Merino 19 August 2018 в 03:50

поделиться

Любой метод myMethod () должен возвращать значение String. Что, если ваше условие ложно, myMethod возвращает что-нибудь? ans нет, поэтому вам нужно определить return null или некоторое строковое значение в ложном состоянии

public String myMethod() {
    boolean c=true;
    if (conditions) {
        return "d";
    }
    return null;//or some other string value
}

ответ дан loknath 19 August 2018 в 03:50

поделиться

попробуйте следующее:

public String myMethod()
{
    if(condition)
    {
       return x;
    }

   return ""; //returns empty string
}

ответ дан Plengo 19 August 2018 в 03:50

поделиться

public String myMethod() // it ALWAYS expects a String to be returned
{
    if(condition) // will not execute always. Will execute only when condition is true
    {
       return x; // will not be returned always.
    }
   //return empty string here

}

ответ дан TheLostMind 19 August 2018 в 03:50

поделиться

Другие вопросы по тегам:

Похожие вопросы:

I am starting with java and while I was writing a way to identify whether a number was prime I wrote a method like this

public static boolean checkPrime(int n){

    int x = 2;

    while (((n % x) != 0) && (n > x)){
        x = x + 1;
    }

    if(((n % x) == 0) && (n == x)){     
        return !Prime;
    }
    else if(((n % x) == 0) && (n > x)){
        return Prime;
    }
    else {
        return Prime;
    }
}

What I couldn’t figure out was the necessity of the last else statement. If I do not put it, I get an error message. However I don’t think it is necessary since all possibilities are covered by the previous loops, with their respecting return statements. Or am I missing something?

asked Jun 8, 2013 at 2:28

FSB's user avatar

FSBFSB

491 silver badge10 bronze badges

7

You don’t need the else. What you are being told by the compiler is the method must return SOMETHING. Your last else block could replaced by this:

return PrimeOrNot;

In fact, your method could look like this:

public static boolean checkPrime(int n){
    int x = 2;
    while (((n % x) != 0) && (n > x)){
        x = x + 1;
    }
    if(((n % x) == 0) && (n == x)){     
        return !(PrimeOrNot);
    }
    return (PrimeOrNot);
}

In any case your very last statement block cannot be an else if.

answered Jun 8, 2013 at 2:31

xagyg's user avatar

xagygxagyg

9,5222 gold badges31 silver badges29 bronze badges

The method has a return type of boolean.

The compiler is scared by the possibility in which none of the ‘if’ cases are met. In this situation, the method know what to return. This method needs to return something, so just give it a ‘return true’ before the method ends. It won’t ever be read, but it will make the compiler happy.

answered Jun 8, 2013 at 2:34

Ian's user avatar

IanIan

5614 gold badges8 silver badges15 bronze badges

The conditional expressions within the if/else-if are only evaluated at runtime. Normally, the compiler wouldn’t know what the result would be, because they are not evaluated at compile-time. Only, situation when the compiler can figure what the result of the expression would be is when it’s some compile-time constant (like if(true) {).

answered Jun 8, 2013 at 2:38

Bhesh Gurung's user avatar

Bhesh GurungBhesh Gurung

50.4k22 gold badges93 silver badges141 bronze badges

public static boolean checkPrime(int n){
    boolean PrimeOrNot = false;
    int x = 2;

    while (((n % x) != 0) && (n > x)){
        x = x + 1;
    }

    if(((n % x) == 0) && (n == x)){     
        return !(PrimeOrNot);
    }
    else if(((n % x) == 0) && (n > x)){
        return (PrimeOrNot);
    }

    return PrimeOrNot;
}

answered Jun 8, 2013 at 2:34

mconlin's user avatar

mconlinmconlin

8,0895 gold badges31 silver badges37 bronze badges

A method which returns a value will be compilable if it returns a value in all its possible code paths.

Imagine for a moment that you’re the compiler. You see this code:

int myMethod()
{
    if (cond)
        return anInt;
}

While you may know that cond is in fact always true, the compiler will not know that. It can only be sure about the result of a boolean expression if it is an expression which can be evaluated at compile time only.

Note that the vast majority of «code optimization» in Java is in fact done at run time (JIT: Just In Time).

answered Jun 8, 2013 at 2:47

fge's user avatar

fgefge

119k33 gold badges254 silver badges329 bronze badges

The compiler only checks to see if there are valid return paths from your method. The compiler isn’t «smart» enough to inspect the conditional statements and determine whether the conditions can be logically met — the compiler simply checks to make sure that some value is returned to respect the contract of the method declaration.

Some would argue that the following is a cleaner structure for the method (but I think it is just a matter of taste):

public static boolean checkPrime(int n){
    int x = 2;
    while (((n % x) != 0) && (n > x)){
        x = x + 1;
    }

    if(((n % x) == 0) && (n == x)){     
        return !(PrimeOrNot);
    }

    return (PrimeOrNot);
}

answered Jun 8, 2013 at 2:35

eebbesen's user avatar

eebbeseneebbesen

5,0428 gold badges48 silver badges70 bronze badges

4 ответа

Прямо сейчас функция не гарантирует возврат boolean, потому что возможно, что ни один из операторов if никогда не будет введен.

Вы могли бы исправить это так (но только делать это, если это действительно то, что нужно вашей логике!):

public boolean Winner() {
    for (int z = 0; z < 3; z++) {
            if (board[z] != null && board[z] == board[z+3] && board[z] == board[z+6]
                    ) {
                return true;
            } 
    }
    for(int i=0; i<7;i+=3){
        if (board[i] != null && board[i] == board[i+1] && board[i] == board[i+2]) {

    return true;}
    }

    return false;
}

musical_coder
02 дек. 2013, в 18:05

Поделиться

Компилятор Java не делает предположений, что цикл for будет иметь итерацию или что будет выполняться блок операторов if.

Существуют пути выполнения, в которых нет инструкции return. Что произойдет, если путь выполнения не выполнит какие-либо из существующих операторов return и опустится до конца? Там нет return.

Добавьте return внизу.

rgettman
02 дек. 2013, в 18:30

Поделиться

Все возможные способы выхода метода должны возвращать что-то. Если ваш код делает это через оба цикла, не имея условия if, чтобы определить значение true, вам нужно вернуться в конце, который указывает, что возвращается.

Nathan Hughes
02 дек. 2013, в 18:34

Поделиться

Компилятор не знает, что будет выполнен хотя бы один из циклов. Он учитывает все возможности выполнения, и один из них состоит в том, что ни одна из циклов не будет выполнена, и в этом случае нет оператора возврата. Поэтому добавьте оператор возврата из циклов.

Nick Div
02 дек. 2013, в 19:00

Поделиться

Ещё вопросы

  • 1Как узнать, когда выложена активность?
  • 1Приложение магазина C #, получающее переменные данные Json
  • 0Как вычесть месяцы из даты и справиться с переполнением?
  • 0Скомпилируйте Qt-проект и включите библиотеки Qt
  • 1Как навсегда отключить автомобильный режим?
  • 1Обещание Resolve возвращает 2 массива один неопределенный
  • 3Рассчитать остаточное отклонение от модели логистической регрессии scikit-learn
  • 1javascript document.getElementsbyClassName не является функцией
  • 0Необработанное исключение, не похоже, что что-то не так
  • 0Ошибка определения функции C ++ (передача параметров)
  • 0Ошибка токена для ApsaraDB для RDS (MySQL) при изменении настроек белого списка в облаке Alibaba
  • 0Как я могу сделать «слайдер» справа налево (или как угодно), нажав на стрелку Nav
  • 1Веб-сайт Azure Подключение к базе данных Azure отлично работает на локальных, но не развернутых
  • 1Почему я не могу определить элемент DOM как глобальную переменную?
  • 0Перечисление данных медленно в codeigniter
  • 0Apache Shiro и Spring MVC
  • 1Остановить запись звука — Java
  • 1Office 365 надстройка Javascript — синтез речи
  • 0отправка почты с использованием бесплатной функции codignator, доставляемой как спам
  • 0Вызов одного метода из другого
  • 1Не удается запустить приложение Windows Phone с пользовательской схемой URL
  • 0PHP-код для прикрепления формы внутри выражения echo
  • 1Определите метод с универсальным параметром типа M <T> в C #
  • 0привязка события click к jqzoom для запуска fancybox
  • 0Rails Forms: изменить поля формы из ранее выбранных полей
  • 0Как нажать на элемент, используя другой связанный элемент?
  • 1Использование Unicode в пункте меню google-apps
  • 1Удаление одинаковых выбросов в двух временных сериях
  • 0Актуальный URL открыть страницу перенаправления в php
  • 1Запускать программу, только если ввод состоит из одной буквы
  • 0Rails — Получить URL-адрес Paperclip с помощью SQL-запроса
  • 0Использовать селекторы jQuery рекурсивно?
  • 0получить записи с той же строкой JSON
  • 0MySQL Insert Slow в AWS RDS
  • 1Как определить, что для fillStyle был назначен недопустимый цвет?
  • 1Какой сценарий «закрывает» DIV, если пользователь щелкает за его пределами? (версия 5 или>, а не jQuery)
  • 1QueryDocumentSnapshot не может разрешить
  • 1Разбор строки данных: split против регулярного выражения
  • 0в GWT или GWTP, как экспортировать html-страницу, чтобы группа графического дизайна могла выполнять свою работу, не раскрывая им исходный код?
  • 1Как машинописный текст разрешает импорт @ angular / core / testing и как упаковывается угловое ядро?
  • 0Android Room — Обработка списка объектов в объекте и запрос результатов
  • 0Встроенный диалог в Tab Control не может работать во втором диалоге, MFC
  • 0Я хочу отключить кнопку Время входа в систему.
  • 0Как связать файл статической библиотеки на машине Linux
  • 0Значение столбца не отображается в сетке ng (ui)
  • 1Инъекция коинов от конструктора в Котлине
  • 1Привязать динамически сгенерированный Grid как DataTemplate к HubSection в C #
  • 1LinqToSql — SQL, сгенерированный CONCAT (UNION)
  • 1Экспорт таблицы Excel с сервера в JavaScript

  • Если машинка выдает ошибку he1
  • Если машинка выдает ошибку door
  • Если масса взвешиваемого груза приближается к максимальной нагрузке весов относительная ошибка тест
  • Если ошибки ничему не учат это не опыт это коллекционирование собственной глупости
  • Если ошибка эксель на английском