return string first half challenge

Hi,

I am trying below challenge
http://codingbat.com/prob/p172267
i wrote as below
public String firstHalf(String str) {
int i=str.length();
if((i/2)==0)
return str.substring(0,(i/2)-1);
  
}

Open in new window


I got compilation error as below

Compile problems:


Error:      public String firstHalf(String str) {
                    ^^^^^^^^^^^^^^^^^^^^^
This method must return a result of type String

Possible problem: the if-statement structure may theoretically
allow a run to reach the end of the method without calling return.
Consider adding a last line in the method return some_value;
so a value is always returned.

see Example Code to help with compile proble

How to improve and fix my code
Please advise. thanks in advance
LVL 7
gudii9Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

ozoCommented:
Follow the advice given in the message, and add a return statement that happens even when the if condition is not satisfied.

Or consider whether you even need the if condition.
0
gudii9Author Commented:
public String firstHalf(String str) {
String str2=null;
int i=str.length();
if((i%2)==0)
str2= str.substring(0,(i/2));
return str2;
  
}

Open in new window


I modified as above and pased all tests

Expected      Run            
firstHalf("WooHoo") → "Woo"      "Woo"      OK         
firstHalf("HelloThere") → "Hello"      "Hello"      OK         
firstHalf("abcdef") → "abc"      "abc"      OK         
firstHalf("ab") → "a"      "a"      OK         
firstHalf("") → ""      ""      OK         
firstHalf("0123456789") → "01234"      "01234"      OK         
firstHalf("kitten") → "kit"      "kit"      OK         
other tests
OK         


Does my solution look fine?
please advise
0
ozoCommented:
Your solution works, although it is doing something it does not need to do.
0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

gudii9Author Commented:
although it is doing something it does not need to do.

i wonder what it is doing extra. please advise
0
ozoCommented:
When would you want to skip line 5?
0
gudii9Author Commented:
When would you want to skip line 5?
if i skip line 5 i cannot get first half right. Please advise what i am missing
0
ozoCommented:
Are you saying that you don't want to skip line 5?
0
gudii9Author Commented:
public String firstHalf(String str) {
String str2=null;
int i=str.length();
if((i%2)==0)
//str2= str.substring(0,(i/2));
return str2;
  
}

Open in new window


when i skip line 5 i am getting compilation error



Compile problems:


Error:      public String firstHalf(String str) {
                    ^^^^^^^^^^^^^^^^^^^^^
This method must return a result of type String

Possible problem: the if-statement structure may theoretically
allow a run to reach the end of the method without calling return.
Consider adding a last line in the method return some_value;
so a value is always returned.

see Example Code to help with compile problems
0
gudii9Author Commented:
Your solution works, although it is doing something it does not need to do.

I would like to know what my code doing something it does not need to do so that i correct it. Please advise
0
ozoCommented:
You said
if i skip line 5 i cannot get first half right.
So don't skip line 5.
0
gudii9Author Commented:
Your solution works, although it is doing something it does not need to do.


I would like to know what my code doing something it does not need to do so that i correct it. Please advise

please advise on this.
0
ozoCommented:
It is not necessary to cause line 5 to be skipped.
0
gudii9Author Commented:
public String firstHalf(String str) {
String str2=null;
int i=str.length();
if((i%2)==0)
str2= str.substring(0,(i/2));
return str2;
 
}

so what is the improvement i can make to my code.

I did not get your below point
although it is doing something it does not need to do.

please advise
0
ozoCommented:
the
if((i%2)==0)
causes line 5 to be skipped when i%2!=0
causing line 5 to be skipped is not necessary
0
gudii9Author Commented:
public String firstHalf(String str) {
String str2=null;
int i=str.length();
if((i%2)==0)
//str2= str.substring(0,(i/2));
return str.substring(0,i/2);
  
}

Open in new window


are you saying directly returning as above is preferable.

I am getting as below

compile problems:


Error:      public String firstHalf(String str) {
                    ^^^^^^^^^^^^^^^^^^^^^
This method must return a result of type String

Possible problem: the if-statement structure may theoretically
allow a run to reach the end of the method without calling return.
Consider adding a last line in the method return some_value;
so a value is always returned.

see Example Code to help with compile problems


please advise
0
ozoCommented:
It does not return anything when (i%2)!=0
0
gudii9Author Commented:
the
if((i%2)==0)
causes line 5 to be skipped when i%2!=0
causing line 5 to be skipped is not necessary

i still did not understand what you mean.

My code now works and passes all tests as below
public String firstHalf(String str) {
String str2=null;
int i=str.length();
if((i%2)==0)
//str2= str.substring(0,(i/2));
return str.substring(0,i/2);
else
return null;
  
}

Open in new window


So i took care of your suggestion in my above code right?
0
ozoCommented:
Yes.
(and changing
   return null;
to
  return str+"kitten";
would also pass all tests)
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
gudii9Author Commented:
public String firstHalf(String str) {
String str2=null;
int i=str.length();
if((i%2)==0)
//str2= str.substring(0,(i/2));
return str.substring(0,i/2);
else
return str+"kitten";
 
}


i changed as above and passed all tests. But how it passed all tests. For odd number string (say "xyz") it goes into else loop right. then str+"kitten" should return "xyzkitten"

Is xyzkitten correct value?
please advise
0
ozoCommented:
The challenge says
Given a string of even length
so (i%2)==0 is never false

Is xyzkitten correct value?
We don't know.  The challenge says nothing about what firstHalf("xyz") should yield.
However, there may be arguments for expecting "xy" or "x" rather than "null"
(which is what firstHalf("nullings") should yield)
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.