每当我运行Java程序时,我偶然发现了一个奇怪的错误。
代码如下
interface meth{
int prime(int x);
int div3(int x);
int div8(int x);
int divall(int x);
}
class Cal implements meth{
int x;
int z;
public int prime(int x){
return (x/x)*(x/1);
}
public int div3(int x){
return x%3;
}
public int div8(int x){
return x%8;
}
public int divall(int x){
if((x%3)==0){
if((x%8)==0){ z=2;}
}
else {z=1;}
return z;
}
}
public class Math {
public static void main(String[] args) {
Cal val = new Cal();
System.out.println("This program will output " +
"numbers that are: Prime, divisible " +
"by 3, and divisible by 8, but not " +
"divisible by both 3 and 8");
for(int i=1; i==2500; i++)
if(val.prime(i)==i){
System.out.println(i);
}
else if(val.divall(i)==2){
break;
}
else if(val.div3(i)==0){
System.out.println(i + "");
}
else if(val.div8(i)==0){
System.out.println(i);
}
}
}
它编译得很好。但是当它运行时,它不是只显示素数的数字,可以被3整除,并且可以被8整除,而只显示第一个 system.out.println 来说明程序的用途。任何和所有帮助将不胜感激。
另外,我知道使用接口并且单独的类可能有点过分。我只是在练习本课程当前章节中教授的新思想。
答案 0 :(得分:2)
for(int i=1; i==2500; i++)
到
for(int i=1; i < 2500; i++)
答案 1 :(得分:1)
for循环中的所有内容永远不会运行,因为for循环的条件是不可能满足的:我将为1,并且对于没有迭代,它将是==到2500.
答案 2 :(得分:1)
这是因为for
循环使用以下格式:
for(initialization; boolean_expression; update){
//do this
}
问题是,循环的boolean_expression
部分永远不会成立。你在做:
for(int i=1; i==2500; i++)
你的for循环从初始化i = 1
开始。 i
不能同时为2500
和1
。你应该做的是:
for(int i = 1; i <= 2500; i++){
//do something here
}
这将在i <= 2500
时运行,并在每次循环时向i
添加1,使其运行2,500
次。
另外,我注意到的另一件事是你的for循环中没有花括号,所以它循环,但从不做任何事情。您应该在for循环中添加{}
个大括号,就像对if
语句所做的那样。
所以,你的for循环应该是这样的:
for(int i = 1; i <= 2500; i++){
if(val.prime(i)==i){
System.out.println(i);
}
else if(val.divall(i)==2){
break;
}
else if(val.div3(i)==0){
System.out.println(i + "");
}
else if(val.div8(i)==0){
System.out.println(i);
}
}