mikedugan
mikedugan

Reputation: 2393

Loop to Find Sum of Digits

I am trying to write a simple and quite useless program to generate a list of all integers 1><1000 where the sum of digits is 11. Every time I run this, I end up in an infinite loop. I've tried different things - for(){}, while(){}, adding a if(count>500){break;} to halt it after the loop counter reaches 500....still nothing...where am I going wrong in this?

Thanks in advance

    //loops through all numbers whose sum of digits is 11
    for(int number = 29; number < 1000; number++) {
        //checks the values of the 100,10,and 1 position
        int hPlace = number / 100; number = number - (hPlace * 100);
        int tPlace = number / 10;  number = number - (tPlace * 10);
        int oPlace = number;
        //sum of digits
        int i = hPlace + tPlace + oPlace;


        //prints if sum of digits is 11
        int count = 0;
        if (i == 11) {
            count++;
            System.out.print(i + " ");
        }

        //new line after every 10 numbers -- just for formatting
        if (count % 10 == 0) {
            System.out.println("");
        }
      }

Upvotes: 1

Views: 1791

Answers (7)

Jogi Reddy Kotam
Jogi Reddy Kotam

Reputation: 1

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class SumDigits    
{
public static void main(String args[])throws Exception
{
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter a Number:");
    String string=br.readLine();
    System.out.println("length of Number:"+string.length());
    int sum=0;
    int number=0;
    for(int i=0;i<=string.length()-1;++i)
    {
        char character=string.charAt(i);
        number=Character.getNumericValue(character);
        sum=sum+number;
    }//for
    System.out.println("Sum of digits of Entered Number:"+sum);
    }//main()
}//class

Upvotes: 0

Francisco Spaeth
Francisco Spaeth

Reputation: 23893

You are using same variable as controller for your fors. Try to change the controller variable within the for structure from number to number1

You are changing the variable here:

                           ---------------------------------
int hPlace = number / 100; number = number - (hPlace * 100);
                           ---------------------------------

Upvotes: 4

jedyobidan
jedyobidan

Reputation: 926

Don't change the value of you loop control variable inside the loop, or dangerous things may result. Instead, copy the value into a new variable and use that in the loop.

Upvotes: 0

Vivin Paliath
Vivin Paliath

Reputation: 95488

if(count>500){break;} to halt it after the loop counter reaches 500....still nothing

This won't work because you're redeclaring count with an initial value of 0 everytime. So the if will always return false.

Also, these following lines:

 int hPlace = number / 100; number = number - (hPlace * 100);
 int tPlace = number / 10;  number = number - (tPlace * 10);

Modify number, which is your loop variable. Your loop will not perform correctly if you modify the loop variable in unexpected ways. Instead, copy the value over to another variable.

Upvotes: 0

Sachin
Sachin

Reputation: 18747

//loops through all numbers whose sum of digits is 11
    for(int number = 29; number < 1000; number++) {
        //checks the values of the 100,10,and 1 position
        int hPlace = number / 100; 
        **number** = number - (hPlace * 100);     // PROBLEM!!!
        int tPlace = number / 10;  
        **number** = number - (tPlace * 10);     // PROBLEM!!!
        int oPlace = number;
        //sum of digits
        int i = hPlace + tPlace + oPlace;


        //prints if sum of digits is 11
        int count = 0;
        if (i == 11) {
            count++;
            System.out.print(i + " ");
        }

        //new line after every 10 numbers -- just for formatting
        if (count % 10 == 0) {
            System.out.println("");
        }
      }

Upvotes: 0

Don't do this

number = number - (hPlace * 100);

when your condition is dependent on number

for(int number = 29; number < 1000; number++)

Upvotes: 2

Akram Berkawy
Akram Berkawy

Reputation: 5060

because you have two nested for loops which both of them use the same variable as counter

for(int number = 29; number < 1000; number++) {
        for(number = 29;number < 930;number++) {

Upvotes: 0

Related Questions