我的朋友给了我这段代码,我似乎找不到它的错误。我附上以下代码:
import java.util.*;
public class prg {
public static void main(String[] args) {
int n;
int count;
int a=0,b=1;
int c=0;
Scanner kb=new Scanner(System.in);
n=kb.nextInt();
int ar[]=new int[100];
ar[1] = 2;
for(int i=3;i<=n;i+=2)
{
count=0;
for (int j = 2; j < i ;j++ ) {
if (i % j == 0) {
count++;
break;
}
}
if(count==0)
ar[i]=i;
}
for(int i=0;i<=n;i+=2)
{
a = b;
b = c;
c = a + b;
ar[i]=c;
}
for(int i=0;i<14;i++)
System.out.print(ar[i]+" ");
}
}
因此,偶数索引存储斐波那契数列,而奇数索引存储质数。
问题:代码的其余部分工作正常,但是'ar'数组的第9个索引正在打印0我不知道为什么,由于这个原因,输出显示错误。
将输入n设为14并检查代码。
先谢谢您
PS:我已经用另一种方式解决了这个问题,所以我要求您不要给出“尝试我的方法,效率不高”之类的答案。我只想知道数组的INDEX 9出了什么问题。
编辑:素数循环面临问题。
答案 0 :(得分:2)
当i
为9时,您的代码正确地识别出它不是素数,因此count
不是0。这将导致该行无法运行:
ar[i]=i;
然后将i
加2,以检查下一个奇数。这意味着您永远不会将数组的索引9设置为任何值,因此它将保持其默认值-0。
要解决此问题,您应该引入一个新变量possiblePrime
来跟踪要检查的数字。在外部for循环的每次迭代中都增加此变量,并且仅在i
为质数时才增加possiblePRime
。另外,将以上行更改为:
ar[i] = possiblePrime;
答案 1 :(得分:1)
9不是质数,因此它在数组中未设置任何内容。默认值为0,因此它会被打印。