使用随机数和模数需要帮助

时间:2014-03-12 22:37:52

标签: java for-loop random division modulo

我试图制作一个简单的程序,在1到100之间显示20个随机数,然后打印出哪些数字可以被3整除,相当于1%3和2%3。它似乎工作正常,但我注意到它只适用于列表中的最后一个数字。我缺少什么来包括搜索我的数学中的所有数字?提前感谢您提供的任何帮助!

import java.util.Random;


public class Lab5 {

public static void main(String[] args) {

    Random rnd = new Random();
    int repeat = 19;
    int n = 0;

    for(int i=0;i<=repeat;i++){
        n = rnd.nextInt(100)+1; 
        System.out.print(n+", ");

    }
    System.out.println();
    System.out.println("-------------------------------------");

    if(n % 3 == 0){
        System.out.println("Numbers divisible by three: "+n+(", "));

    }else{
        System.out.println("Numbers divisible by three: NONE");

    }
    System.out.println("-------------------------------------");
    if(n == 1 % 3){
        System.out.println("Numbers equivalent to one modulo three: "+n+(", "));

    }else{
        System.out.println("Numbers equivalent to one modulo three: NONE");
    }

    System.out.println("-------------------------------------");

    if(n == 2 % 3){
     System.out.println("Numbers equivalent to two modulo three: "+n+(", "));

    }else{
        System.out.println("Numbers equivalent to two modulo three: NONE");
    }

}

}

5 个答案:

答案 0 :(得分:2)

只打印最后一个号码,因为检查号码是否可分,等等不在您的for循环顶部。只需将其下方的所有代码复制并粘贴到for循环中,它就可以按预期工作。

你在这里也有一个错误:if (n == 1 % 3),这是合法的,但会检查n是否等于1/3的余数。我不认为这是你想要达到的,所以像Ypnypn建议的那样纠正它:if (n % 3 == 1)

答案 1 :(得分:2)

您的n在循环体外声明,因此其值将保持不变。但是,由于您在每次循环迭代中覆盖n,因此只有n的最后一个值将持续存在,并将由程序的其他部分使用。

正如Ypnypn所说,纠正你对modulo的使用,正如Arbiter和deanosaur建议的那样,将其余的程序逻辑移到for loop

答案 2 :(得分:1)

模数的正确语法是n % 3 == 2。当前代码n == 2 % 3表示n == 0,因为Java中的操作顺序要求在相等之前评估模数。

答案 3 :(得分:1)

您将所有输出语句(System.out.println()放在之外的循环中,因此它只输出最后一个值。

移动输出语句,使它们在循环中:

public static void main(String[] args) {
    Random rnd = new Random();
    int repeat = 19;
    int n = 0;
    int[] numbers = new int[3]; // To hold how many numbers have modulo 0, 1 or 2
    for(int i = 0; i <= repeat; i++) {
        n = rnd.nextInt(100)+1; 
        System.out.print(n+", ");
        if(n % 3 == 0) 
            System.out.println("The number " + n + " is divisible by 3");
        else 
            System.out.println("" + n + " modulo 3 = " + n % 3);

        numbers[n % 3]++;
    }
    System.out.println("Numbers divisible by 3: " + numbers[0]);
    System.out.println("Numbers with modulo 3 = 1: " + numbers[1]);
    System.out.println("Numbers with modulo 3 = 2: " + numbers[2]);
}

答案 4 :(得分:0)

嗯..你没有在循环中计算任何东西,所以你的print语句在你退出循环后工作了n的最后一个值。尝试像

这样的东西
package com.example.modulo;
import java.util.Random;
public class Modulo {
public static void main(String[] args) {

    Random rnd = new Random();
    int repeat = 19;
    int n = 0;

    int[] nMod = new int[3];
    nMod[0] = 0;
    nMod[1] = 0;
    nMod[2] = 0;
    for (int i = 0; i <= repeat; i++) {
        n = rnd.nextInt(100) + 1;
        nMod[n%3] = nMod[n%3] + 1;
        System.out.print(n + " (" + n%3 + "), ");
    }
    System.out.println();
    System.out.println("-------------------------------------");

    System.out.println("Numbers divisible by three: " + nMod[0] + (", "));
    System.out.println("Numbers equivalent to one modulo three: " + nMod[1] + (", "));
    System.out.println("Numbers equivalent to two modulo three: " + nMod[2] + (", "));
}
}