代码之家  ›  专栏  ›  技术社区  ›  user3663055

尽管有适当的布尔值,但代码不会打印

  •  0
  • user3663055  · 技术社区  · 7 年前

    我正在为我的Java类编写一个代码,其中我必须找到一个4位数。它由四个不同的数字组成,千位数是十位数的3倍,数字是奇数,所有数字加起来就是27。

    我在纸上计算了一下,应该是9837,但我的java代码没有打印出来,有人能帮忙吗?

    public class Batman {
    
    public static void main(String[] args) {
        boolean isFourDifferent = false;
        boolean isThousand3TimesTens = false;
        boolean isOdd = false;
        boolean is27 = false;
    
         for (int number = 0; number < 10000; number++) {
            int d0 = number % 10; number /=10;
            int d1 = number % 10; number /=10;
            int d2 = number % 10; number /=10;
            int d3 = number;
    
            if ((d0 != d1) && (d0 != d2) && (d0 !=d3) &&
                (d1 != d2) && (d1 != d3) && 
                (d2 != d3))
                isFourDifferent = true;
    
            if (d3 == (3 * d1))
                isThousand3TimesTens = true;
    
            if (d0 % 2 != 0)
                isOdd = true;
    
            if ((d0 + d1 + d2 + d3) == 27)
                is27 = true;
    
            if(isFourDifferent  && isThousand3TimesTens && isOdd && is27)
            System.out.println("Found" + number);
    
    
    }
    
    
    }
    }
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   rgettman    7 年前

    您的代码有2个问题:

    1. 您正在更改 number 在每个循环过程中,在循环结束时 数字 过去是,现在是个位数。因此,有一个无限循环。使用另一个变量,初始化为 数字 ,供您计算 d0 ,则, d1 ,则, d2 d3

    2. 你没有把你的布尔人调回 false 每个循环。将声明/初始化移至 for

    通过上述更改,代码如下所示:

    for (int number = 0; number < 10000; number++) {
         boolean isFourDifferent = false;
         boolean isThousand3TimesTens = false;
         boolean isOdd = false;
         boolean is27 = false;
    
         int temp = number;
         int d0 = temp % 10; temp /=10;
         int d1 = temp % 10; temp /=10;
         int d2 = temp % 10; temp /=10;
         int d3 = temp;
    
         if ((d0 != d1) && (d0 != d2) && (d0 !=d3) &&
                 (d1 != d2) && (d1 != d3) && 
                 (d2 != d3))
             isFourDifferent = true;
    
         if (d3 == (3 * d1))
             isThousand3TimesTens = true;
    
         if (d0 % 2 != 0)
             isOdd = true;
    
         if ((d0 + d1 + d2 + d3) == 27)
             is27 = true;
    
         if(isFourDifferent  && isThousand3TimesTens && isOdd && is27)
             System.out.println("Found" + number);
     }
    

    输出:

    Found9837
    
        2
  •  0
  •   alter123    7 年前

    你实际上是在划分 number /=10; 这是for循环的变量。

    您可以做的是:

    int inti=number;
    inti/=10;
    int d3 = inti%10;
    inti/=10;
    int d1 = inti%10;