这段代码的输出面临问题

时间:2019-07-18 10:07:57

标签: java

我的朋友给了我这段代码,我似乎找不到它的错误。我附上以下代码:

    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出了什么问题。

编辑:素数循环面临问题。

2 个答案:

答案 0 :(得分:2)

i为9时,您的代码正确地识别出它不是素数,因此count不是0。这将导致该行无法运行:

ar[i]=i;

然后将i加2,以检查下一个奇数。这意味着您永远不会将数组的索引9设置为任何值,因此它将保持其默认值-0。

要解决此问题,您应该引入一个新变量possiblePrime来跟踪要检查的数字。在外部for循环的每次迭代中都增加此变量,并且仅在i为质数时才增加possiblePRime。另外,将以上行更改为:

ar[i] = possiblePrime;

答案 1 :(得分:1)

9不是质数,因此它在数组中未设置任何内容。默认值为0,因此它会被打印。