Java 可被5或6整除的

Java 可被5或6整除的,java,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 %

我正在尝试制作一个程序,其中列出了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++;
            }
        }

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

问题是,有时,在每个循环中,您会将编号增加两次。第一次是数字是
6
5
的倍数,第二次是不打印换行符时。这具有跳过数字的效果,因此
5
6
的连续倍数不会打印,例如您的
115
,因为它位于
114
之后并被跳过。还请注意,
5
6
的其他连续倍数不会打印,例如
125
之后的
126


要明确的是,每个循环只增加
number
一次,但要删除
number++if
else
块中选择code>,并通过放置
number++无条件递增位于
的最底部,而
循环。

删除它显示的第一个位置
number++
系统输出打印后(数字+“,”)

改变

else {
                number++;
            }
当你刚打印了一行新行时,它就会这样做

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

您需要将递增的数字与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++;
}
intj=1;
整数=100;
而(数量<1001){
如果(数字%6==0 | |数字%5==0){
系统输出打印(数字+“,”);
j++;
}
如果(j%10==0){
System.out.println();
}
数字++;
}

您有一个重复的
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++;
}
intj=1;
整数=100;
而(数量<1001){
如果(数字%6==0 | |数字%5==0){
系统输出打印(数字+“,”);
j++;
}
如果(j%10==0&&j!=0){
System.out.println();
j++;
}
数字++;
}
试试这个:

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++; 
            }
        }
    }
}
公共类可分为5和6{
公共静态void main(字符串[]args){
int j=1;
用于(整数=100;数字<1001;数字++){
如果(数字%6==0 | |数字%5==0){
系统输出打印(数字+“,”);
j++;
}
如果(j%10==0){//j从不等于0
System.out.println();
j++;
}
}
}
}
顺便说一句,对于确定循环,最好使用
For
而不是
while
。(使代码更具可读性)


正如您所见,您不会以这种方式感到困惑,只在正确的位置增加一次编号。

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

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++;
            }
        }
公共类可分为5和6{
公共静态void main(字符串[]args){
j=1;
整数=100;
而(数量<1001){
如果(数字%6==0 | |数字%5==0){
系统输出打印(数字+“,”);
数字++;
j++;
}
如果(j%10==0&&j!=0){
System.out.println();
j++;
}
否则{
数字++;
}
}
然后您可以看到
else
附加到第二个
if
,而不是第一个,因此
数字的递增可以发生两次

在这之后,更清楚的是,在第一个
if
中,
编号
只有在打印编号时才会递增。您真正想要的是
编号
在每次迭代中递增,确保这一点的最佳方法是仅在关闭
之前递增编号
,而

然后您将认识到,
while(number<1001)..number++
循环可以替换为更健壮的
for(int number 100;number<1001;number++)
,从而完全消除循环体中的
number
增量

在设计循环时,很重要的一点是要保持循环中哪些值是“不变的”(永远不会改变),这些值只是随着每次迭代而增加,并且在更不规则的基础上修改。如果你保持这些概念的正确性,那么循环就不会那么可怕。

公共类模式{
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++;
            }
        }
    }
}
公共静态void main(字符串[]args){ int j=0; 整数=100; 而(数量<1001){ 如果(数字%6==0 | |数字%5==0){ 系统输出打印(数字+“,”); j++;} 如果(j%10==0&&(数字%6==0 | |数字%5==0)){ System.out.println(); 数字++; } 其他的 { 数字++; } } } }
试试这个代码

代码中的错误是,实际上您将
number
增加了两次,这就是您丢失一些数字的原因。
祝你好运:)

你做了两次
number++
,这很可疑。尝试为
循环重构
。没有奇数可以被6整除。你的问题是你的代码格式不正确(严重)115可以被5整除。哈哈,你误导了所有人:)我应该再说一遍,你为什么要检查j!=0?事实上,它总是正确的。
j++
应该在
if
块中实现,因为它是打印的数字。你为什么要检查j!=0?事实上,它总是不正确的rue.同样正确。回答中更正。Cheers@mok只是在没有j的情况下运行代码
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++;
            }
        }
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++;
            }
        }
    }
}