以下是问题陈述:
使用线程编写一个java程序来计算前25个素数,以及 计算前50个斐波纳契数。设置计算的线程的优先级 Fibonacci数为8,另一个为5.计算30个Fibonacci数后,make 那个线程要睡觉并接受素数计算。计算完25后 素数继续斐波纳契数计算。
我的代码:
class Fibo{
private int n=1,a=-1,b=1,c;
synchronized void disp(){
for(int i=0;i<=45;i++){
if(n==31)
try{
System.out.println("Fibonacci Generation Halted");
Thread.sleep(5000);
}catch(InterruptedException e){
System.out.println("Caught interrupted exception");
}
c=a+b;
System.out.println(n+" Fibo : "+c);
a=b;
b=c;
n++;
}
}
}
class Prime{
int n=1;
boolean isPrime=true;
synchronized void disp(){
for(int i=2;;i++){
for(int j=2;j<=i/2;j++){
if((i%j)==0){
isPrime = false;
break;
}
}
if(isPrime){
System.out.println(n+" Prime : "+i);
n++;
if(n==25){
break;
}
}
}
}
}
class PrimeThread implements Runnable{
Thread t;
Prime p1;
PrimeThread(){
t=new Thread(this);
t.setPriority(Thread.NORM_PRIORITY);
t.start();
}
public void run(){
p1=new Prime();
p1.disp();
}
}
class FiboThread implements Runnable{
Thread t2;
Fibo f;
FiboThread(){
t2=new Thread(this);
t2.setPriority(8);
t2.start();
}
public void run(){
f=new Fibo();
f.disp();
}
}
class MainClass{
public static void main(String args[]){
FiboThread ft=new FiboThread();
PrimeThread pt=new PrimeThread();
}
}
OUTPUT:
1 Fibo : 0
2 Fibo : 1
3 Fibo : 1
4 Fibo : 2
5 Fibo : 3
6 Fibo : 5
7 Fibo : 8
8 Fibo : 13
9 Fibo : 21
10 Fibo : 34
11 Fibo : 55
12 Fibo : 89
13 Fibo : 144
14 Fibo : 233
15 Fibo : 377
16 Fibo : 610
1 Prime : 2
17 Fibo : 987
2 Prime : 3
18 Fibo : 1597
19 Fibo : 2584
20 Fibo : 4181
21 Fibo : 6765
22 Fibo : 10946
23 Fibo : 17711
24 Fibo : 28657
25 Fibo : 46368
26 Fibo : 75025
27 Fibo : 121393
28 Fibo : 196418
29 Fibo : 317811
30 Fibo : 514229
Fibonacci Generation Halted
31 Fibo : 832040
32 Fibo : 1346269
33 Fibo : 2178309
34 Fibo : 3524578
35 Fibo : 5702887
36 Fibo : 9227465
37 Fibo : 14930352
38 Fibo : 24157817
39 Fibo : 39088169
40 Fibo : 63245986
41 Fibo : 102334155
42 Fibo : 165580141
43 Fibo : 267914296
44 Fibo : 433494437
45 Fibo : 701408733
46 Fibo : 1134903170
当斐波那契线停止时,我期待其余的素数被打印出来,但这并没有发生,这背后的原因可能是什么?
答案 0 :(得分:0)
您没有重置主要布尔值
class Prime{
int n=1;
boolean isPrime=true;
synchronized void disp(){
for(int i=2;;i++){
isPrime=true; // YOU NEED TO RESET THIS!!!
for(int j=2;j<=i/2;j++){
if((i%j)==0){
isPrime = false;
break;
}
}
if(isPrime){
System.out.println(n+" Prime : "+i);
n++;
if(n==25){
break;
}
}
}
}