【问题标题】:Find even numbers between interval but exclude multiples of random number in Java在Java中查找区间之间的偶数但排除随机数的倍数
【发布时间】:2021-03-13 01:04:51
【问题描述】:

我最近开始学习 Java,并且有几个练习要练习。一直在努力解决这个问题:我必须获得 2 个随机数,A 和 B,并且必须打印 1 和 B 之间的所有偶数。我设法完成了这部分,但接下来的问题是:如果找到 2A,程序必须中断并显示以下消息:“找到 2A 的倍数”。我所能做的就是打印 1 和 B 之间的每个偶数,并排除每个 2 的倍数A,如下所示:

import java.util.Random;

public class JavaExercise {

    public static void main(String[] args) {
        Random random = new Random();
        int A = random.nextInt(9) + 1;
        int B = random.nextInt(99) + 1;
        
        for (int i = 1; i <= B; ++i) {
             if ((i % 2 == 0) && (i % (2*A) != 0)) 
                 System.out.println (i);
             else
                 break;
                
        }

    }

}

但我需要程序在找到 2*A 的倍数时中断,并显示上面的消息。尝试这样做,但得到了一个非常糟糕的输出,显示消息多次而不是一次,:

        for (int i = 1; i <= B; ++i) {
            if (i % 2 == 0)
                 System.out.println (i);
                if (i % (2*A) == 0)
                    break;
                    System.out.println("Multiple of 2A found");
                
        }

谁能帮我找出我哪里出错了?不胜感激!

【问题讨论】:

  • b相比,为什么要限制a的范围?为什么不把它们都设为random.nextInt(99) + 1
  • 我不确定我是否理解你的问题,但在练习中要求:A 的范围必须是从 1 到 10,B 的范围是从 1 到 100(如有错误,请见谅,我的英语很生疏)
  • 你理解得很好。您的问题中没有包含范围作为要求。所以我只是想知道你为什么像以前那样选择它们。

标签: java logic


【解决方案1】:

也许你可以添加几个打印语句来看看你的逻辑是否有效:

import java.util.Random;

public class JavaExercise {
    public static void main(String[] args) {
        Random random = new Random();
        int A = random.nextInt(9) + 1;
        int B = random.nextInt(99) + 1;
        int A_times_2 = A * 2;
        System.out.printf("A: %d, B: %d, 2A: %d%n", A, B, A_times_2);

        for (int i = 2; i <= B; i += 2) {
            if (i % A_times_2 == 0) {
                System.out.printf("Multiple of 2A found: %d%n", i);
                break;
            }
            System.out.println(i);
        }
    }
}

示例输出:

A: 9, B: 20, 2A: 18
2
4
6
8
10
12
14
16
Multiple of 2A found: 18

【讨论】:

  • 非常感谢!我想我是在用 Python 的方式思考(最近学习了 Python 并决定开始 Java),所以我弄错了 order os 语句!另外,我很欣赏更多打印语句的想法,它们确实使它更清晰!非常感谢!
【解决方案2】:

您的行顺序错误。

        for (int i = 2; i <= B; i+=2) {
             if( i % (2*A) == 0 )
             {
                 System.out.println( "Multiple of 2A found." );
                 break;
             }
             System.out.println (i);                
        }

【讨论】:

    猜你喜欢
    • 2012-10-04
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2015-01-20
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多