0

所以,我想找出 1 到 100 之间的哪些数字可以被 3 和 7 整除。我让它工作了,除了其中一个数字。出于某种原因,3 % 3 给了我 3 作为余数,但 6 % 3 给了我 0。这是我的代码:

     public class factors
     {
public static void main(System args[])
{
    //Variables
    int integer, remainder;

    //Displays header
    System.out.print("Integers less than 100 that are \nevenly divisible by 3 or 7");

    //Loops through each integer
    for (integer = 1; integer <= 100; integer++)
    {
        remainder = integer % 3; //determines if 3 is a factor

        if (remainder == 0) //displays integer 
        {
            System.out.println(integer + " is divisible by 3");
        }

        remainder = integer % 7; //determines if 7 is a factor

        if (remainder == 0) //displays integer
        {
            System.out.println(integer + " is divisible by 7");
        }
    }
}

}有谁知道为什么这对数字 3 不起作用?

4

4 回答 4

6

你的代码实际上是在做

remainder = 3 % 7; // equals 3.

确定您的代码为什么没有按照您的想法执行的最佳方法是使用调试器单步执行您的代码。

所有 3 和 7 的倍数都是 21 的倍数,即 21、42、63、84。

于 2013-10-31T20:00:21.777 回答
6

您的 3 被添加到上面文本行的末尾。你会看到

Integers less than 100 that are 
evenly divisible by 3 or 73

因为你写print的不是println这行文字。% 运算符工作得很好, 3 % 3 确实是 0,而不是 3。

于 2013-10-31T20:22:27.123 回答
1

首先,您的代码可以缩短为:

 //and
 for (int i = 1; i <= 100; i++){
    if(i % 3 == 0 && i % 7 == 0) {
        System.out.println(i);
    }
 }

//or
 for (int i = 1; i <= 100; i++){
    if(i % 3 == 0 || i % 7 == 0) {
        System.out.println(i);
    }
 }

另外我注意到你没有为你的整数、余数变量声明一个类型。我没有尝试重新创建这些问题。从解决这个问题开始。

于 2013-10-31T20:16:51.900 回答
1

没有输出remainder- 您正在显示integer。所以3应该打印3.

让您打印的语句更明确:

System.out.println(integer + " is divisible by 3"); //  for the first `if`
and
System.out.println(integer + " is divisible by 7"); // for the second `if`

这应该可以消除您的困惑。

3 您的逻辑打印出可被or 整除的数字7

于 2013-10-31T20:06:21.397 回答