With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

Hi,

I was working on below challenge

http://codingbat.com/prob/p165666

I wrote as below

Expected Run

stringBits("Hello") → "Hlo" "He" X

stringBits("Hi") → "H" "Hi" X

stringBits("Heeololeo") → "Hello" "He" X

stringBits("HiHiHi") → "HHH" "Hi" X

stringBits("") → "" "null" X

stringBits("Greetings") → "Getns" "Gr" X

stringBits("Chocoate") → "Coot" "Ch" X

stringBits("pi") → "p" "pi" X

stringBits("Hello Kitten") → "HloKte" "He" X

stringBits("hxaxpxpxy") → "happy" "hx" X

How to improve it and fix it. Please advise

I was working on below challenge

http://codingbat.com/prob/p165666

I wrote as below

```
public String stringBits(String str) {
for(int i=0;i<str.length()-1;i=i++){
String s="";
return (s+str.substring(i,i+2));
}
return null;
}
```

I got output as belowExpected Run

stringBits("Hello") → "Hlo" "He" X

stringBits("Hi") → "H" "Hi" X

stringBits("Heeololeo") → "Hello" "He" X

stringBits("HiHiHi") → "HHH" "Hi" X

stringBits("") → "" "null" X

stringBits("Greetings") → "Getns" "Gr" X

stringBits("Chocoate") → "Coot" "Ch" X

stringBits("pi") → "p" "pi" X

stringBits("Hello Kitten") → "HloKte" "He" X

stringBits("hxaxpxpxy") → "happy" "hx" X

How to improve it and fix it. Please advise

```
public String stringBits(String str) {
String s="";
for(int i=0;i<str.length();i+=2)
s=s+str.substring(i,i+1);
return s;
}
```

```
public String stringBits(String str) {
String s="";
for(int i=0; i<str.length(); ++i)
s+=str.substring(i, ++i);
return s;
}
```

See if you can tell why they BOTH work!!

```
public String stringBits(String str) {
for(int i=0;i<str.length()-1;i=i++){
String s="";
return (s+str.substring(i,i+2));
}
return null;
}
public String stringBits(String str) {
String s="";
for(int i=0;i<str.length();i+=2)
s=s+str.substring(i,i+1);
return s;
}
```

comparing my solution with your solution as above both looks almost similar except in the increment i wrote i=i+1 and inside for loop i=i+2 (where as yours i=i+2 and i=i+1) . I wonder what is the difference.

I also made my usual mistake

i<str.length()-1

I though i represent like index so it is 1 less than original length.

Please advise

for (int y=0;y<(str.length());y=y+2){

sb.append(str.charAt(y));

Is y is not like index (index always starts with 0 so we take str.length()-1) but we are taking y<(str.length())

Please advise

Is y is not like index (index . . .

Right well consider this - the word "Hello". The index starts at zero as you say, so this is character 'H'. Then we add 2 to that, so that points at character 'l', then, because 'y' is now 2, and 2 is still less than 5 (the length of the string 'Hello'), we again add 2 to 'y', making it 4, and take the 4th index character, which is 'o', and so we get 'Hlo'. Now, if 2 is added to 'y', it will exceed the string length, and so this brings the loop to a halt.

1. What is the index number of the beginning of the string?

2. What is the index number of the end of the string ?

3. What is the length of the string?

4. What is the MAXIMUM value that this expression can return for 'y' ? :

5. What is the difference between the values of your answers to points 4 and point 2 above?

>>0

2. What is the index number of the end of the string ?

>>4

3. What is the length of the string?

>>5

4. What is the MAXIMUM value that this expression can return for 'y' ? : y<"Hello".length()

>>5(since "Hello".length() is 5)

5. What is the difference between the values of your answers to points 4 and point 2 above?

>>sorry i did not clearly understand this. point 4 gives answer as 5 and point 2 gives answer as 4 so both lenght and index are different and index is always one less than length

Right well consider this - the word "Hello". The index starts at zero as you say, so this is character 'H'. Then we add 2 to that, so that points at character 'l', then, because 'y' is now 2, and 2 is still less than 5 (the length of the string 'Hello'), we again add 2 to 'y', making it 4, and take the 4th index character, which is 'o', and so we get 'Hlo'. Now, if 2 is added to 'y', it will exceed the string length, and so this brings the loop to a halt.

this explanation is very clear. I was jumping by mistake to next character rather than alternate character whose difference is 2 not1

comparing my solution with your solution as above both looks almost similar except in the increment i wrote i=i+1 and inside for loop i=i+2 (where as yours i=i+2 and i=i+1) . I wonder what is the difference.

I also made my usual mistake

i<str.length()-1

I though i represent like index so it is 1 less than original length.

I think your best bet to figure this out would be to "hand test" by making a table of every assignment change to see where your values are awry...

Think about what you are doing in the loop!

Putting your "return" INSIDE the loop makes NO SENSE! It would STOP looping the first time it hits it! Compare to the OTHER solutions offered that build up the proper answer and only then returns that answer AFTER the loop completes...

You also need to understand the way "++i" "i++" and "i=i++" work... go over these operators in a good C or Java language reference...

'y' ? : y<"Hello".length()

Is it is ternary operator(looks like that to me with ? and :

It also does not look like that since there is no two separate entities corresponding to condition true and false.

Please advise

That's it ! y's maximum value can be 4 - the highest number that is less than 5, . And 5, as you know, is the length of the string.

```
public String stringBits(String str) {
String s="";
for(int i=0;i<str.length();i+=2)
s=s+str.substring(i,i+1);
return s;
}
public String stringBits(String str) {
String s="";
for(int i=0; i<str.length(); ++i)
s+=str.substring(i, ++i);
return s;
}
```

Both of above scenarios working since we are incrementing first then assigning to i in the second scenario which makes it equivalent to fist scenario

(It's good that you made the two pieces of code work, but as someone great once said, 'you should make things as simple as possible, and no simpler'.

All Courses

From novice to tech pro — start learning today.

Open in new window