Granny's Programming Pearls
"inside of every large program is a small program struggling to get out"
JavaRanch.com/granny.jsp
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

Troubles Accumulating  RSS feed

 
Chris Sart
Greenhorn
Posts: 3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi, Im trying to create a program that counts the number of words in a provided string. When I loop through the string, I want to add +1 to the word count when there is a break between words. However, when I try to display the final word count, it keeps on returning the my initial word count.
Would anyone be able to point me in the right direction?
 
Marc Cracco
Ranch Hand
Posts: 80
1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Why don't you look at something like The String class Split method
 
Chris Sart
Greenhorn
Posts: 3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I appreciate the quick response! However, I want it to be so any nonCharacter or Digit can be used to seperate words. For example "this-----is----four----words".
I tested the loop and it works, Im just having a hard time getting the summed wordcount to display.
 
Tony Docherty
Bartender
Posts: 3271
82
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Welcome to the ranch.

When faced with this type of problem the first thing to do is look at the code and work through the code as if you were the computer ie executing each line of code in your head. If there are more than a couple of variables get some paper and write out the variables names and what value is assigned to each variable then, as you mentally execute each line of code, look at your piece of paper to see what value a given variable in that line of code has and/or change the written value of any variable that is assigned a new value. you should quickly find your problem.

If you can't find it that way, the next thing is to add print statements so you can see if the value of a variable at a given point in the code is what you think it should be. In your case I suggest at the begining of the for loop you print out the value of v, aChar and bChar.
 
Marc Cracco
Ranch Hand
Posts: 80
1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Chris Sart wrote:I appreciate the quick response! However, I want it to be so any nonCharacter or Digit can be used to seperate words. For example "this-----is----four----words".
I tested the loop and it works, Im just having a hard time getting the summed wordcount to display.


Have you checked if your code is entering the if statement. Put a system out message if you want saying "plus one." also the string.split method can split on anything you chose.
 
fred rosenberger
lowercase baba
Bartender
Posts: 12565
49
Chrome Java Linux
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Put in System.out.println statements to figure out what your code is really doing. for starters, i'd put on before the if-statement on line 20, and another inside the if-block, before your line 22 (note: you will need to add curly braces, which should always be there anyway for just this reason).
 
Chris Sart
Greenhorn
Posts: 3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I figured it out! Went step by step exactly as you all suggested. My if statement wasn't initializing the variables bChar and aChar so i moved the declarations into the for loop. I also had to adjust the loop control variable range.

Can someone tell me why I had to move the declarations into the loop? They weren't out of scope before right?
 
Tony Docherty
Bartender
Posts: 3271
82
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Chris Sart wrote:I figured it out! Went step by step exactly as you all suggested. My if statement wasn't initializing the variables bChar and aChar so i moved the declarations into the for loop. I also had to adjust the loop control variable range.

Can someone tell me why I had to move the declarations into the loop? They weren't out of scope before right?

I suggest you go back over it again because whilst you've clearly got it working you haven't figured out what was wrong with it which suggests you've fixed it more by trial and error than by reasoning which is never a good way to approach coding/debugging.
 
fred rosenberger
lowercase baba
Bartender
Posts: 12565
49
Chrome Java Linux
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I believe you have a misconception on how java works.

in your original code, you have this:



let's assume that your string is "Fred".

Since v is zero, then aChar gets set to 'F', and bChar gets set to 'r'.

Now, you enter your loop. the value of v changes, but that has NO IMPACT on aChar and bChar. Those variable have been set. Java doesn't remember that aChar was set based on the variable v, so changing v does not change those.

So each time through your loop, you keep looking at the same two characters in your if-statement.
 
Syed Naved Ali
Greenhorn
Posts: 8
1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Chris Sart wrote:

char aChar = newString.charAt(v);
char bChar = newString.charAt(v+1);

for (v=0; v <= newString.length();++v)
{

if (Character.isLetterOrDigit(bChar)&& !(Character.isLetterOrDigit(aChar)))
++words;


}

[/code]


The thing you are missing here:
char aChar = newString.charAt(v);
char bChar = newString.charAt(v+1);

Above code statement are not part of for loop so the values assigned only for once due to this you will never reach your if condition.
For better practice write test cases and check your code coverage.
 
Campbell Ritchie
Marshal
Posts: 56599
172
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Welcome to the Ranch
 
Consider Paul's rocket mass heater.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!