可被5或6整除

时间:2014-04-11 15:52:35

标签: java

我正在尝试制作一个程序,列出100-1000之间可被5或6整除的所有数字。这是我使用的代码:

public class divisibleBy5and6 {
    public static void main (String[] args) {

        j = 1; 
        int number = 100;
        while (number < 1001) {
            if (number % 6 == 0 || number % 5 == 0) {
                System.out.print(number + ", ");
                number++;
                j++; }

            if (j % 10 == 0 && j != 0) {
                System.out.println();
                j++; }
            else {
                number++;
            }
        }

我使用int j来制作它,因此每行有9个。这是我的输出:

100, 102, 105, 108, 110, 114, 120, 125, 130, 
132, 135, 138, 140, 144, 150, 155, 160, 162, 
165, 168, 170, 174, 180, 185, 190, 192, 195, 
198, 200, 204, 210, 215, 220, 222, 225, 228, 
230, 234, 240, 245, 250, 252, 255, 258, 260, 
264, 270, 275, 280, 282, 285, 288, 290, 294, 
295, 300, 305, 310, 312, 315, 318, 320, 324, 
325, 330, 335, 340, 342, 345, 348, 350, 354, 
355, 360, 365, 370, 372, 375, 378, 380, 384, 
385, 390, 395, 400, 402, 405, 408, 410, 414, 
415, 420, 425, 430, 432, 435, 438, 440, 444, 
445, 450, 455, 460, 462, 465, 468, 470, 474, 
475, 480, 485, 490, 492, 495, 498, 500, 504, 
505, 510, 515, 520, 522, 525, 528, 530, 534, 
535, 540, 545, 550, 552, 555, 558, 560, 564, 
565, 570, 575, 580, 582, 585, 588, 590, 594, 
595, 600, 605, 610, 612, 615, 618, 620, 624, 
625, 630, 635, 640, 642, 645, 648, 650, 654, 
655, 660, 665, 670, 672, 675, 678, 680, 684, 
685, 690, 695, 700, 702, 705, 708, 710, 714, 
715, 720, 725, 730, 732, 735, 738, 740, 744, 
745, 750, 755, 760, 762, 765, 768, 770, 774, 
775, 780, 785, 790, 792, 795, 798, 800, 804, 
805, 810, 815, 820, 822, 825, 828, 830, 834, 
835, 840, 845, 850, 852, 855, 858, 860, 864, 
865, 870, 875, 880, 882, 885, 888, 890, 894, 
895, 900, 905, 910, 912, 915, 918, 920, 924, 
925, 930, 935, 940, 942, 945, 948, 950, 954, 
955, 960, 965, 970, 972, 975, 978, 980, 984, 
985, 990, 995, 1000, 

这显然是不对的,因为我遗漏了像115这样的数字。我做错了什么?

7 个答案:

答案 0 :(得分:5)

您需要从if / else语句中分隔数字增量。它应该在每次迭代时发生,无论是什么......

int j = 1; 
int number = 100;
while (number < 1001) {
  if (number % 6 == 0 || number % 5 == 0) {
    System.out.print(number + ", ");
    j++; 
   }
   if (j % 10 == 0) {
     System.out.println();
   }
   number++;
}

答案 1 :(得分:4)

问题在于,有时候,您会在每个循环中递增number两次。第一次是数字是65的倍数,第二次是您不打印换行符。这具有跳过数字的效果,使得56的连续倍数不会打印,例如115,因为它在{{1}之后并且被跳过了。另请注意,1145的其他连续倍数不会打印,例如6之后的126

明确指出,每个循环只增加125一次,但从numbernumber++;块中删除if,并通过放置else无条件地增加在number++;循环的最底部。

答案 2 :(得分:3)

number++;

之后删除它所说的System.out.print(number + ", ");的第一个位置

改变

else {
                number++;
            }

当您刚刚打印换行符时,它会执行此操作。

            number++;

它将在每次循环迭代时执行此操作 number应无条件递增

答案 3 :(得分:3)

试试这个:

public class DivisibleBy5and6 {
    public static void main (String[] args) {

        int j = 1; 
        for (int number = 100 ; number < 1001; number++) {
            if (number % 6 == 0 || number % 5 == 0) {
                System.out.print(number + ", ");
                j++; 
            }

            if (j % 10 == 0) {// j never equals 0
                System.out.println();
                j++; 
            }
        }
    }
}

BTW,对于明确的循环,最好使用for而不是while。 (使您的代码更具可读性)

如你所见,你不要以这种方式感到困惑,并在正确的地方增加number

答案 4 :(得分:1)

你有一个重复的number++,当两个条件都为真时,它被执行了两次。 这超过了一些价值观:现在纠正了:

int j = 1;
int number = 100;
while (number < 1001) {
    if (number % 6 == 0 || number % 5 == 0) {
        System.out.print(number + ", ");
        j++;
    }

    if (j % 10 == 0 && j != 0) {
        System.out.println();
        j++;
    }
    number++;
}

答案 5 :(得分:0)

您的问题是代码格式不正确。正确缩进它会变得更加清晰:

public class divisibleBy5and6 {
    public static void main (String[] args) {

        j = 1; 
        int number = 100;
        while (number < 1001) {
            if (number % 6 == 0 || number % 5 == 0) {
                System.out.print(number + ", ");
                number++;
                j++;
            }

            if (j % 10 == 0 && j != 0) {
                System.out.println();
                j++;
            }
            else {
                number++;
            }
        }

然后您可以看到else附加到第二个if,而不是第一个,因此number的递增可以发生两次。

之后更清楚的是,在第一个if内,number仅在打印数字时递增。你真正想要的是number每次迭代都会增加,而确保这一点的最佳方法是在}的结束while之前立即增加数字。

然后你会发现while(number < 1001) ... number++循环可以用更健壮的for (int number 100; number < 1001; number++)替换,完全消除了循环体中number的递增。

在设计循环时,保持循环中哪些值“不变”(根本不变)非常重要,这些值在每次迭代时都会递增,并且会在更不规则的基础上进行修改。如果你保持这些概念,那么循环就不那么令人生畏了。

答案 6 :(得分:0)

public class pattern {
    public static void main (String[] args) {

        int j = 0; 
        int number = 100;
        while (number < 1001) {
            if (number % 6 == 0 || number % 5 == 0) {
                System.out.print(number + ", ");
                j++; }

            if (j % 10 == 0&&(number % 6 == 0 || number % 5 == 0)) {
                System.out.println();
                number++;     
            }
            else
            {
                number++;
            }
        }
    }
}

试试这段代码。

您的代码中的错误是您实际上两次递增number,这就是您错过某些数字的原因。 祝你好运:)