素数数组不能正确打印出内容

时间:2017-09-24 16:41:54

标签: java arrays

我在java中遇到一些数组问题。我尝试使用线程并在数组中添加素数但它不起作用。我希望b [c]将所有素数从firstnumber存储到secondnumber。

public class btl {
public static boolean IsPrime(int n) {

    if (n < 2) {
        return false;
    }

    int squareRoot = (int) Math.sqrt(n);
    for (int i = 2; i <= squareRoot; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}




public static void main(String args[]) {
    Scanner scanIn = new Scanner(System.in);
    int first = 0;
    int second = 0;
    try {
        System.out.println("Input First Number");
     first = scanIn.nextInt();
        System.out.println("Input Second Number");
        second= scanIn.nextInt();
    }
    catch(Exception e) {
        System.out.println("Something wrong!");
    }
    int x = first;
    int y = second;
    int a;
    int[] b = new int[y];

    Thread threadA = new Thread(new Runnable() {
        @Override
        public void run() {     
            int c=0;
            for(int i=x; i<y; i++)
            {   
                if(IsPrime(i)) {
                    b[c] = i;
                    c++;
                    System.out.println(b[c]);

                }

            }
        }
    });
    threadA.start();
}

enter image description here

2 个答案:

答案 0 :(得分:0)

你的主要问题是你首先附加c,然后才打印出b [c],它仍然是数组中的空白单元格。尝试:

for(int i=x; i<y; i++) {   
        if(IsPrime(i)) {
            b[c] = i;
            System.out.println(b[c]);
            c++;
       }
 }

顺便说一句,当您定义数组b时 - 您不需要所有y单元格。申报成本更具成本效益:

int[] b = new int[y-x];

相反。

答案 1 :(得分:0)

在ThreadA运行函数中,将c的值递增1,然后要求打印b [c],然后是下一个案例(尚未填充)。所以你应该在c ++行之前打印b [c]。