Solved

# return statement

Posted on 2014-10-29
Medium Priority
152 Views
Hi,

I am going through below challenge solution

http://codingbat.com/prob/p140449

I have not understood below return statement.

return (talking && (hour < 7 || hour > 20));

public boolean parrotTrouble(boolean talking, int hour) {
return (talking && (hour < 7 || hour > 20));
// Need extra parenthesis around the || clause
// since && binds more tightly than ||
// && is like arithmetic *, || is like arithmetic +
}
0
Question by:gudii9
• 8
• 4

LVL 85

Accepted Solution

ozo earned 668 total points
ID: 40411054
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
&& is  Conditional-AND;  false when left operand (talking) is false, otherwise evaluate the second operand
|| is Conditional-OR;  true when the left operand (hour < 7) is true, otherwise evaluate the second operand (hour > 20)

Without the parentheses, talking && hour < 7 || hour > 20 would evaluate as ((talking && hour < 7) || hour > 20)
0

LVL 37

Assisted Solution

Kimputer earned 664 total points
ID: 40411072
While I don't understand the coding logic (why it returns, for what reason), interpreting the code is simple.

parrotTrouble(True, 1) = True
parrotTrouble(True, 8) = False
parrotTrouble(True, 21) = True
parrotTrouble(False, 1) = False
parrotTrouble(False, 8) = False
parrotTrouble(False, 21) = False

It just returns the AND of the two variables. Talking is either True or False, it's already input as the first variable.
The second part is evaluated from the second variable. If hours is below 7 OR above 20, that second part is True (otherwise False).
With these two outcomes, you do the AND operation again for the final result.
0

LVL 17

Assisted Solution

krakatoa earned 668 total points
ID: 40411307
>>talking && (hour < 7 || hour > 20)

Quite simply - talking has to be true, and hour has to be EITHER less than 7 OR more than 20, then a final true is returned - otherwise false is returned of course.
0

LVL 17

Expert Comment

ID: 40411389
Thanks.

Footnote : (now you've done the challenge) -

This would be a way of splitting the logic up also :

``````public boolean parrotTrouble(boolean talking, int hour) {

if (talking==false) {return talking;}
return (hour<7||hour>20);

}
``````
0

LVL 85

Expert Comment

ID: 40411410
//If you're going to split it up
if( !talking ){ return false; }
if( hour<7 ){ return true; }
return hour>20;
0

LVL 17

Expert Comment

ID: 40411421
You can do that too of course, but I was sticking to the illustration of keeping the ORs together.
0

LVL 17

Expert Comment

ID: 40411427
And don't forget our old friend Mr Ternary

``````return talking = talking==true?hour<7||hour>20?true:false:false;
``````
0

LVL 17

Expert Comment

ID: 40411445
This might also be an option at some point :

``````if ((!(talking==false))&& !((hour>6)&&(hour<21))){return true;}
else{return false;}
``````

- which is just for people who don't like ors. ;)

OR should it be :

``````if ((!(talking==false))&& !((hour>6)&&(hour<21))){return !false;}
else{return !true;}
``````
0

LVL 85

Expert Comment

ID: 40411496
Presumably those are just meant to be silly, but
!((hour>6)&&(hour<21))
is not equivalent to
(hour < 7 || hour > 20)
0

LVL 17

Expert Comment

ID: 40411519
They are not silly inasmuch as they all pass the codingbat tests - so maybe the tests are silly.
0

LVL 17

Expert Comment

ID: 40411540
Remember that >6 and <21 are the hours that ARE ok to speak.

(and so for the record, your ID: 40411496 is not correct).

You can look at it this way :
"<x OR >y" MUST be the complement of ">=x AND <=y".
0

LVL 85

Expert Comment

ID: 40413299
Sorry, I misread "!((>x-1)&&(<y+1))", expecting  ">=x AND <=y" (one of the reasons to avoid silly extraneous transforms)
!((hour>6)&&(hour<21)) is equivalent when hour is an int
0

LVL 17

Expert Comment

ID: 40413339
Right, ok.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A solution for Fortify Path Manipulation.
Looking for a way to avoid searching through large data sets for data that doesn't exist? A Bloom Filter might be what you need. This data structure is a probabilistic filter that allows you to avoid unnecessary searches when you know the data definâ€¦
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
###### Suggested Courses
Course of the Month8 days, 12 hours left to enroll