Что именно делает return в булевом методе? - PullRequest
1 голос
/ 11 января 2012

В этом коде:

public static void main(String []args){
   int [] a = {10, 20, 30};
   if(m1(a))
     m2(a, 0);
   else
     m2(a, 1);
   for(int i = 0; i < a.length; i++)
     System.out.println(a[i] + " ");
}

public static boolean m1(int [] a){
   return a[0] == a[1] / 2;
}

public static void m2(int [] a, int b){
    a[b] = 1;
}
}

в m2, что за строка появляется после return, то есть a[0] == a[1] / 2 do? это заявление цыпочки? потому что это ставит в тупик, когда дело доходит до return

Ответы [ 6 ]

5 голосов
/ 11 января 2012
return a[0] == a[1] / 2

возвращает истину, если выражение действительно истинно, т.е.a [0] равно a [1], деленному на 2, и false в противном случае.

5 голосов
/ 11 января 2012

Я думаю, что вы имеете в виду m1.

Во всяком случае, это помогает, если вы читаете код следующим образом:

public static boolean m1(int [] a){
   return (a[0] == (a[1] / 2));
}

Обратите внимание на приоритет оператора: круглые скобки вычисляются перед равенством. То есть вернуть равенство между a [0] и результатом выражения (a [1] / 2).


Если вы не знаете своих правил приоритета, вы можете прочитать код так:

public static boolean m1(int [] a){
    int i = a[1] / 2;
    boolean foo = (a[0] == i);
    return foo;
}
2 голосов
/ 11 января 2012

Думайте об этом с точки зрения оператора if - что делает следующее?

if (a[0] == (a[1] / 2)) {
...

Это логический результат оценки - true или false.Если это правда, сделай что-нибудь.

Использование его с return возвращает этот логический результат вызывающей стороне.

2 голосов
/ 11 января 2012

Это логическое выражение, указывающее значение, которое будет возвращать метод.
Он ничем не отличается от метода, который возвращает int.

1 голос
/ 11 января 2012

Существует определенный вид программистов, которые предпочитают кодировать это следующим образом:

if( a[0] == a[1] / 2 )
    return true;
else
    return false;

Мы презираем таких программистов, и во время обеденного перерыва мы не сидим рядом с ними.

Итак, чтобы ответить на ваш вопрос, return a[0] == a[1] / 2; - это совершенно правильное утверждение, и любой опытный программист предпочел бы увидеть его таким, а не каким-либо другим способом.'==' внутри выражения говорит нам, что это выражение оценивается как логическое значение, а затем это логическое значение возвращается функцией.Это абсолютно нормально.

Если это поможет вам лучше понять это, вы можете выразить это как return a[0] == (a[1] / 2);, но если вы знаете приоритет вашего оператора, это не нужно, и в любом случае альтернатива (return (a[0] == a[1]) / 2;)не может работать, потому что оператор деления не применим к логическим значениям.

0 голосов
/ 11 января 2012

В методе, который возвращает значение, оператор return указывает, какое значение вернуть. Например, этот метод:

public static int timesTwo(int i)
{
    return 2 * i;
}

возвращает два раза свой аргумент; так что этот метод:

public static void main(String... args)
{
    System.out.println(timesTwo(7)); // prints 14.
}

отпечатков 14.

Ваш пример:

public static boolean m1(int [] a)
{
    return a[0] == a[1] / 2;
}

возвращает true, если a[0] == a[1] / 2; в противном случае возвращается false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...