找質數 用extend的作法

我想找出100以下的質數,底下是我的程式。

但不知道為什麼跑出來的結果只會顯示很多個"99",錯在那裡,幫幫忙,謝謝

package myJava.exercise.ch08;

import java.lang.*;

import java.io.*;

public class ex8_01

{

public static void main(String args[])

{

cb x=new cb();

int roy[];

roy=x.prime();

x.output(roy);

}

}

class ca

{

public static int[] prime()

{

int y[]=new int[100];

for(int k=0;k<100;k++)

{

for(int i=2;i<100;i++)

{

for(int j=2;j<=i/2;j++)

{

if((i%j==0)||(i%2!=0))

y[k]=i;

else

break;

}

}

}

return y;

}

}

class cb extends ca

{

public void output(int roy[])

{

for(int i=0;i<100;i++)

System.out.println(roy[i]);

}

}

1 Answer

Rating
  • 8 years ago
    Favorite Answer

    1. 質數判斷式 if((i%j==0)||(i%2!=0)) 有問題

    2. k 從 0 到 99 都跑一模一樣的程式碼,也就是都會是最接近 100 的質數,才會造成 roy 中每一個數字都一樣。

    請參考我的做法

    public class ex8_01 {

    public static void main(String args[]) {

    cb x = new cb();

    int roy[];

    roy = x.prime();

    x.output(roy);

    }

    }

    class ca {

    public static int[] prime() {

    int y[] = new int[100];

    int k = 0;

    for (int i = 2; i < 100; i++) {

    boolean isPrime = true;

    for (int j = 2; j <= i/2; j++) {

    if (i % j == 0) {

    isPrime = false;

    break;

    }

    }

    if (isPrime) y[k++] = i;

    }

    return y;

    }

    }

    class cb extends ca {

    public void output(int roy[]) {

    for (int i = 0; i < 100; i++)

    if (roy[i] != 0)

    System.out.print(roy[i] + " ");

    }

    }

Still have questions? Get your answers by asking now.