我试图制作一个简单的程序,在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");
}
}
}
答案 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] + (", "));
}
}