在Java中使用mod 3

问题描述 投票:0回答:4

所以,我想找出 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 不起作用?

java modulo
4个回答
6
投票

你的代码实际上是在做

remainder = 3 % 7; // equals 3.

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

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


6
投票

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

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

因为您在这行文本中写的是

print
而不是
println
。 % 运算符工作得很好,3 % 3 确实是 0,而不是 3。


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
7
整除的数字。


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);
    }
 }

我还注意到您没有声明整数、余数变量的类型。我并没有尝试重现这些问题;从解决这个问题开始。

© www.soinside.com 2019 - 2024. All rights reserved.