Solved

return statement

Posted on 2014-10-29
13
132 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
 
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
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
array11 challenge 16 52
Change to event 1 74
Starting to learn JAVA, 7 48
Java - Why doesn't this JFrame work 3 18
How to remove superseded packages in windows w60 or w61 installation media (.wim) or online system to prevent unnecessary space. w60 means Windows Vista or Windows Server 2008. w61 means Windows 7 or Windows Server 2008 R2. There are various …
This article will show, step by step, how to integrate R code into a R Sweave document
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

760 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now