我在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();
}
答案 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]。