所以,我想找出 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 不起作用?
你的代码实际上是在做
remainder = 3 % 7; // equals 3.
确定代码为何没有按照您的想法执行的最佳方法是使用调试器单步调试代码。
所有 3 和 7 的倍数都是 21 的倍数,即 21、42、63、84。
您的 3 被添加到上面文本行的末尾。你将会看到
Integers less than 100 that are
evenly divisible by 3 or 73
因为您在这行文本中写的是
print
而不是 println
。 % 运算符工作得很好,3 % 3 确实是 0,而不是 3。
您没有输出
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
整除的数字。
首先,您的代码可以缩短为:
//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);
}
}
我还注意到您没有声明整数、余数变量的类型。我并没有尝试重现这些问题;从解决这个问题开始。