2

我正在尝试编写一个程序来显示 1 到 100 之间的整数,这些整数可以被 6 或 7 整除,但不能同时被 7 整除。

这是我的代码:

import acm.program.*;

public class Problem4 extends ConsoleProgram
{
    public void run()
    {
        for (int i = 1; i <= 100; i++)
        {
            boolean num = ((i % 6 == 0) || (i % 7 == 0));

            if (num == true)
            println(i + " is divisible");
        }
    }
}

上述代码显示以下答案:6,7,12,14,18,21,24,28,30,35,36 , 42,48,49,54,56,60,63,66,70,72 , 77,78 , 84,90,91,96,98

现在粗体数字 42 和 84 都可以被 6 和 7 整除。现在如果我将上面代码中的 更改为||&&结果只显示 42 和 84。

我应该做些什么改变才能从最终结果中删除这两个数字?

4

8 回答 8

19

异或是要走的路。

import acm.program.*;

public class Problem4 extends ConsoleProgram {
  public void run() {
    for (int i = 1; i <= 100; i++) {
      if ( (i % 6 == 0) ^ (i % 7 == 0) ) {
        println(i + " is divisible");
      }
    }
  }
}
于 2009-06-27T19:27:49.353 回答
8

你必须让你的条件看起来像:

boolean num = (i % 6 == 0 || i % 7 == 0) && !(i % 6 == 0 && i % 7 == 0);

这基本上是将“但不是两者”都转换为 Java 代码 :)

于 2009-06-27T19:21:51.457 回答
5

您需要额外检查“但不是两者”。我认为应该是:

布尔数 = ((i % 6 == 0) || (i % 7 == 0)) && (i % 42 != 0);

于 2009-06-27T19:19:44.283 回答
5

你也可以试试

boolean num = ((i % 6 == 0) != (i % 7 == 0));
于 2009-06-27T21:14:02.883 回答
2

想一想能被 6 和 7 整除意味着什么……宇宙和万物生命的答案。

于 2009-06-27T19:18:52.350 回答
1
import acm.program.*;

public class Problem4 extends ConsoleProgram
{
    public void run()
    {
        for (int i = 1; i <= 100; i++)
        {
            boolean num = ((i % 6 == 0) || (i % 7 == 0));
            boolean both = ((i % 6 == 0) && (i % 7 == 0));

            if ((num == true) &&  (both == false))
            println(i + " is divisible");
        }
    }
}
于 2009-06-27T19:21:17.620 回答
0

这是一个应该在 C++ 中也能正常工作的片段,但改为布尔值......

int value;
if ((value % 6 == 0 && value % 7 != 0) || (value % 6 != 0 && value % 7 == 0))
    cout << "Is " << value << " divisible by 6 or 7, but not both? true" << endl;
  else
    cout << "Is " << value << " divisible by 6 or 7, but not both? false" << endl;
于 2009-06-27T21:39:12.613 回答
0

稍微简化的版本

for(int i=1; i<=100; i++) {

            // Either Divisible by 6 or 7 but not both


            if((i%6==0 && i%7!=0) ||( i%7==0 && i%6!=0)) {


                println(i);
于 2016-09-11T05:34:52.280 回答