Solved

return statement

Posted on 2014-10-29
13
135 Views
Last Modified: 2014-10-30
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));

Please advise.
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
Comment
Question by:gudii9
  • 8
  • 4
13 Comments
 
LVL 84

Accepted Solution

by:
ozo earned 167 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 35

Assisted Solution

by:Kimputer
Kimputer earned 166 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 16

Assisted Solution

by:krakatoa
krakatoa earned 167 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
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 16

Expert Comment

by:krakatoa
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);
  
}

Open in new window

0
 
LVL 84

Expert Comment

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

Expert Comment

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

Expert Comment

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

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

Open in new window

0
 
LVL 16

Expert Comment

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

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

Open in new window



- 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;}

Open in new window

0
 
LVL 84

Expert Comment

by:ozo
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 16

Expert Comment

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

Expert Comment

by:krakatoa
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 84

Expert Comment

by:ozo
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 16

Expert Comment

by:krakatoa
ID: 40413339
Right, ok.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Maven Project: Hibernate Dependencies Conflict 10 26
Oracle SQL syntax check  without executing 6 56
table example 4 29
hibernate insert example 13 29
There is an easy way, in .NET, to centralize the treatment of all unexpected errors. First of all, instead of launching the application directly in a Form, you need first to write a Sub called Main, in a module. Then, set the Startup Object to th…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
This video teaches viewers about errors in exception handling.
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

821 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question