使用多线程编程,实现素数的判定。待判定的整数有键盘录入后存放在一个列表, 创建10个线程从列表中取出进行判定,判定结果存入到另一个列表,`用户可以通过键盘查询判定的结果
/**
* 使用多线程编程,实现素数的判定。待判定的整数有键盘录入后存放在一个列表,
* 创建10个线程从列表中取出进行判定,判定结果存入到另一个列表,
* 用户可以通过键盘查询判定的结果
*/
package com.daiinfo.java;
import java.util.List;
import java.util.Set;
public class PrimeGenerator implements Runnable {
List<Integer> sourse;
Set<Integer> dest;
/**
*
* @param sourse
* @param dest
*/
public PrimeGenerator(List<Integer> sourse, Set<Integer> dest) {
super();
this.sourse = sourse;
this.dest = dest;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i=0;i<10;i++) {
if(isPrime(sourse.get(i))) {
dest.add(sourse.get(i));
}
}
}
/**\
* 判断一个整数是否为素数,如果是则返回true,否则返回false
* @param integer
* @return
*/
private boolean isPrime(long number) {
// TODO Auto-generated method stub
//如果一个数小于等于2,则是素数
if(number==2) {
return true;
}
//如果一个数大于2,则判断该数是否能被2和number-1之间的数整除
for(long i=2;i<number;i++) {
if((number%i)==0) {
return false;
}
}
return true;
}
}
```java
package com.daiinfo.java;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class TestPrime {
public static void main(String[] args) {
//创建一个定长集合,只能存放10个元素
List<Integer> list=new ArrayList<Integer>(new Integer(10));
Set<Integer> dest=new HashSet<Integer>();
Scanner sc=new Scanner(System.in);
while(list.size()<10) {
System.out.println("请输入第"+(list.size()+1)+"个大于1的数字:");
int num=sc.nextInt();
if(num>1) {
list.add(num);
}else {
System.out.println("非法数据");
}
}
PrimeGenerator p=new PrimeGenerator(list,dest);
Thread t1=new Thread(p);
Thread t2=new Thread(p);
Thread t3=new Thread(p);
Thread t4=new Thread(p);
Thread t5=new Thread(p);
Thread t6=new Thread(p);
Thread t7=new Thread(p);
Thread t8=new Thread(p);
Thread t9=new Thread(p);
Thread t10=new Thread(p);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
t7.start();
t8.start();
t9.start();
t10.start();
//Set转List集合
ArrayList<Integer> list2=new ArrayList<Integer>(dest);
while(true) {
System.out.println(dest);
boolean isprime=false;
System.out.println("请输入你要判定的数字"+list);
int num2=sc.nextInt();
for(int i=0;i<list2.size();i++) {
if(num2==list2.get(i)) {
isprime=true;
}
}
if(isprime) {
System.out.println("是素数");
}else {
System.out.println("不是素数");
}
}
}
}