1

我正在尝试编写一个简单且无用的程序来生成所有整数 1><1000 的列表,其中数字总和为 11。每次运行时,我都会陷入无限循环。我尝试了不同的东西 - for(){}, while(){},在循环计数器达到 500 后添加 aif(count>500){break;}来停止它......仍然没有......我在哪里出错了?

提前致谢

    //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("");
        }
      }
4

7 回答 7

4

您正在为您的 s 使用与控制器相同的变量for。尝试将for结构中的控制器变量从更改numbernumber1

您在此处更改变量:

                           ---------------------------------
int hPlace = number / 100; number = number - (hPlace * 100);
                           ---------------------------------
于 2013-05-08T22:40:43.987 回答
2

不要这样做

number = number - (hPlace * 100);

当您的病情取决于number

for(int number = 29; number < 1000; number++)
于 2013-05-08T22:44:09.240 回答
0

因为您有两个嵌套for循环,它们都使用与 counter 相同的变量

for(int number = 29; number < 1000; number++) {
        for(number = 29;number < 930;number++) {
于 2013-05-08T22:44:01.573 回答
0
//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("");
        }
      }
于 2013-05-08T22:45:10.677 回答
0

if(count>500){break;} 在循环计数器达到 500 后停止它......仍然没有

这不起作用,因为您每次都count使用初始值重新声明。0所以if总是会返回false。

此外,以下几行:

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

Modify number,这是您的循环变量。如果您以意想不到的方式修改循环变量,您的循环将无法正确执行。相反,将值复制到另一个变量。

于 2013-05-08T22:46:08.010 回答
0

不要在循环内更改循环控制变量的值,否则可能会导致危险的事情。相反,将值复制到一个新变量中并在循环中使用它。

于 2013-05-08T22:46:28.063 回答
0
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
于 2015-01-26T07:43:57.980 回答