gudii9
asked on
hasBad challenge
Hi,
I am working on below challenge
http://codingbat.com/prob/p139075
I wrote my code as below
I am failing below tests.
How to fix and improve my code. Thanks in advance
I am working on below challenge
http://codingbat.com/prob/p139075
I wrote my code as below
public boolean hasBad(String str) {
if(str.indexOf("bad",1)!=-1&&str.indexOf("bad",0)!=-1)
return true;
else
return false;
}
I am failing below tests.
Expected Run
hasBad("badxx") → true false X
hasBad("xbadxx") → true true OK
hasBad("xxbadxx") → false true X
hasBad("code") → false false OK
hasBad("bad") → true false X
hasBad("ba") → false false OK
hasBad("xba") → false false OK
hasBad("xbad") → true true OK
hasBad("") → false false OK
hasBad("badyy") → true false X
other tests
X
How to fix and improve my code. Thanks in advance
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
public boolean hasBad(String str) {
if(str.indexOf("bad",1)==1 ||str.indexOf("bad",0)==0)
{
return true;
}
else
{
return false;
}
}
I passed all the tests now.when we need to put {}
when we need to put {}If you have 1 line of code after an if statement, then the {} are optional. But only for 1 line of code.
So
if (x) {
return true ;
}
is the same as
if (x)
return true ;
Most people prefer to always put the { } in because these are very different:
if (x) {
doSomething() ;
return true ;
}
if (x)
doSomething() ;
return true ; // Whoops - this is the 2nd line after 'if' so it ALWAYS gets called
so this code is actually the same as:
if (x) {
doSomething() ;
}
return true ;
So adding the {} makes it all much clearer.
Doug
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
int i = str.lastIndexOf("bad", 1);
return i == 0 || i == 1;
what is meaning of above 2 lines.
If lastIndexOf "bad" searching backwards after index 1 finds then return i as 1 or i as 0
I am not very clear. Please advise
i is lastIndexOf "bad" searching backwards from index 1
if it is true that i equals 0 or i equals 1, return true
if it is false that i equals 0 or i equals 1, return false
if it is true that i equals 0 or i equals 1, return true
if it is false that i equals 0 or i equals 1, return false
Another way -
if (str.startsWith("bad") || str.startsWith("bad", 1)) {
return true;
} else {
return false;
}
if (str.startsWith("bad") || str.startsWith("bad", 1)) {
return true;
} else {
return false;
}
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
what is meaning ofit means the same as
int i = str.lastIndexOf("bad", 1);
return i == 0 || i == 1;
return str.lastIndexOf("bad", 1)==0 || str.lastIndexOf("bad", 1)==1;
//or
if( str.lastIndexOf("bad", 1)==0 || str.lastIndexOf("bad", 1)==1 ){ return true; }else{ return false; }
//or
if( str.lastIndexOf("bad", 1)==0 ){ return true; }
if( str.lastIndexOf("bad", 1)==1 ){ return true; }
return false;
Only just realised that my "lastIndexOf" solution can be improved further still, like this...
public boolean hasBad(String str) {
return str.lastIndexOf("bad", 1) >= 0;
}
ASKER
if (str.startsWith("bad") || str.startsWith("bad", 1)) {
i never used startsWith function.
what is the meaning of above line esp str.startsWith("bad", 1). please advise
public boolean hasBad(String str) {
return str.lastIndexOf("bad", 1) >= 0;
}
How above code pasing the below test case
hasBad("xxbadxx") → false false OK
It search for string "bad" backwards starting from index 1 right then searches at index 0 if tit finds returns true which makes sense to me.But if string is "xxbadxx" if It search for string "bad" backwards starting from index 1 right then searches at index 0 it is not going to find "bad" so it must return false right. please advise
ASKER
if (str.startsWith("bad") || str.startsWith("bad", 1)) {
above can be written as below right which is more simple to my understanding
if (str.startsWith("bad",0) || str.startsWith("bad", 1)) {
if yes what is difference between below two and when to use which one
if (str.startsWith("bad",0) || str.startsWith("bad", 1)) {
andif (str.startsWith("bad") || str.startsWith("bad", 1)) {
public boolean startsWith(String prefix, int toffset)
Tests if the substring of this string beginning at the specified index starts with the specified prefix.
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#startsWith%28java.lang.String,%20int%29
Tests if the substring of this string beginning at the specified index starts with the specified prefix.
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#startsWith%28java.lang.String,%20int%29
"xxbadxx".lastIndexOf("bad ", 1) does not find "bad" before index 1, so it returns -1
-1 >= 0 is false
-1 >= 0 is false
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Open in new window
i changed as above still failing one test case
Open in new window