www.webdeveloper.com
Results 1 to 6 of 6

Thread: Do-while loop and returning different results if string or integer?

  1. #1
    Join Date
    Apr 2014
    Posts
    44

    Do-while loop and returning different results if string or integer?

    I'm learning about do-while statements in my javascript class right now. I have this jumbled mess at the moment:

    PHP Code:
    //declare and initialize the finalTotal variable and input tally
    var finalTotal 0;
    var 
    inputTotal 0;
    do {
    //take input from the user (will happen at least once)
    var input parseInt(prompt("Let's add numbers! Enter a Number to Add. When you're done, type 'quit'.""Enter A Number"));

    if (
    isNaN(input)) {
    //give a message to user if input is invalid
    document.writeln("<p>Try again! We are looking for numbers to add. Type 'quit' if you're finished.</p>");
    } else {
        var 
    finalTotal = (input finalTotal);
        
    inputTotal++;    

    }
    } while (
    input != "quit");

    document.writeln("<p>You've finished! You're final tally is: " finalTotal ". You inputed " inputTotal " numbers. You can do more than that, can't you?</p>"); 
    Now, I know I have a couple problems here. One, I have the parseInt on the prompt, so they can't enter anything but a number. But, I need them to be able to type "quit" and have the sequence end. So, somehow I need to be able to have them put in numbers and the "do" cycle keeps going, but if they type any word except quit, it returns as NaN and goes back to the start. Then, once they type "quit", the sequence ends and prints the results.

    I'd appreciate any help on this. Thanks!

  2. #2
    Join Date
    Mar 2005
    Location
    Behind you...
    Posts
    903
    That sure is a nasty little loop. It seems like simply moving your parseInt() down to the line where you make your addition calculation is the easiest solution.
    Code:
    //declare and initialize the finalTotal variable and input tally
    var finalTotal = 0;
    var inputTotal = 0;
    do {
    //take input from the user (will happen at least once)
    var input = prompt("Let's add numbers! Enter a Number to Add. When you're done, type 'quit'.", "Enter A Number");
    
    	if(isNaN(input)) {
    		//give a message to user if input is invalid
    		document.writeln("<p>Try again! We are looking for numbers to add. Type 'quit' if you're finished.</p>");
    	} else {
    			var finalTotal = (parseInt(input) + finalTotal);
    			inputTotal++;
    	}
    } while (input.toLowerCase() != "quit");
    
    document.writeln("<p>You've finished! You're final tally is: " + finalTotal + ". You input " + inputTotal + " numbers. You can do more than that, can't you?</p>");
    I also added a toLowerCase() on the check for 'quit' as a precaution. In all reality though you'd probably want to use something else like
    while(input.toLowerCase().indexOf("quit") >= 0);
    as this would catch any weird variations or statements with the word 'quit' in them.
    "Given billions of tries, could a spilled bottle of ink ever fall into the words of Shakespeare?"

  3. #3
    Join Date
    Apr 2014
    Posts
    44
    That works wonders for making sure the calculation works! However, I'm actually running into a totally different problem now. I run the page, input a couple of numbers, and then type quit. The bottom equation works well, but no matter what I do, it prints the "Try Again! We are looking..." portion. Even if I just put in "1" and "2" and then type "quit", it always writes the error message (for NaN(input)) on the final page.

    Anyone know why that is?

  4. #4
    Join Date
    Mar 2005
    Location
    Behind you...
    Posts
    903
    My guess is the do() part of the loop runs one full time with each new input, and is only evaluated at the very end when deciding if the loop should continue. Thus typing 'quit' still runs through the loop, prints the message and finally gets evaluated by while() (which tells it to exit).

    So the solution would be to add a check to see if it matches the exit criteria and then force a break. Something like:
    Code:
    //declare and initialize the finalTotal variable and input tally
    var finalTotal = 0;
    var inputTotal = 0;
    do {
    	//take input from the user (will happen at least once)
    	var input = prompt("Let's add numbers! Enter a Number to Add. When you're done, type 'quit'.", "Enter A Number");
    	if(input.toLowerCase().indexOf("quit") >= 0) break;
    	
    	if(isNaN(input)) {
    		//give a message to user if input is invalid
    		document.writeln("<p>Try again! We are looking for numbers to add. Type 'quit' if you're finished.</p>");
    	} else {
    			var finalTotal = (parseInt(input) + finalTotal);
    			inputTotal++;
    	}
    } while(input.toLowerCase().indexOf("quit") >= 0);
    
    document.writeln("<p>You've finished! You're final tally is: " + finalTotal + ". You input " + inputTotal + " numbers. You can do more than that, can't you?</p>");
    This should prevent it from displaying the message as the loop will exit the current instance right after the value is input.
    "Given billions of tries, could a spilled bottle of ink ever fall into the words of Shakespeare?"

  5. #5
    Join Date
    Apr 2014
    Posts
    44
    That worked famously! Thank you so much!

  6. #6
    Join Date
    Mar 2014
    Posts
    19
    Looks like tis sorted. Well done :-)

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles