永发信息网

一个新手关于java的问题

答案:1  悬赏:0  手机版
解决时间 2021-12-19 09:02
题目:
多线程并发顺序查找
定义并创建1个100000个元素的整型数组
产生0~999随机数填充数组
用5个线程将数组均分为5块,分别顺序查找各范围内等于X的所有元素下标
在主线程(主函数)中输出所有下标,并统计输出等于X的元素个数

下面是我自己编写的代码;
package com.test1;
import java.util.*;
public class Demo_1{
//创建1个100000个元素的整型数组
int intArray[] =new int[100000];
//实例化一个random类
Random random= new Random();
//主类的构造函数,将1000个0~999的随机数放进intArray数组中
public Demo_1(){
for(int i = 0;i<1000;i++)
intArray[i]=random.nextInt(1000);
}
//主函数
public static void main(String[] args){
Demo_1 demo_1= new Demo_1();
Random_1 random_1= new Random_1(200);
random_1.start();

}
}
//准备实现第一个线程
class Random_1 extends Thread
{
//x是要查找的数字,我让所有查找到的数字的下标组成一个数组,j是该数组的下标
int j=0,x=0;
int[] XArray=new int[200];
Demo_1 a =new Demo_1();
//Random_1的构造函数
public Random_1(int x){
this.x=x;
}
//跑线程
public void run() {
System.out.println("这是第一个线程,找到"+x+"的下标有:");
for(int i=0;i<200;i++){
if(a.intArray[i]==x){
XArray[j]=i;
j++;
}
}
for(int m=0;m System.out.print(XArray[m]+" ");
System.out.println();
System.out.println("总共有"+j+"个"+x);
}
}
}

希望大神们能帮我看看问题所在,我得不出想要的答案,不知道是哪里错了
最佳答案
我手上有这个程序
import java.util.ArrayList;
import java.util.Random;

class PP {
static int a[] = init(10000); // 初始化数组、元素赋值、设置数组大小

static int[] init(int n) {
Random rand = new Random();
int t[] = new int[n];
for (int i = 0; i < n; i++) {
// t[i] = 5; // 试验使用
 t[i] = rand.nextInt(1000); // 数字范围0~999
}
return t;
}
}

public class J2ee extends PP implements Runnable {
int count = 0; // 相同元素的统计
int threads = 0; // 线程数量,用来统计退出几个线程
int group; // 分组数量
int search; // 查找内容
int c;
ArrayList index = new ArrayList(); // 用来存储下标

public void setGroup(int group) { // 设置分组的个数
this.group = group;
c = a.length / group; // 每个小组的平均个数,这有点小问题,需要考虑101/5,不能均分的情况,待解决
}

public void setSearch(int search) { // 设置查找的内容
this.search = search;
}

@Override
public void run() {
int gc = Integer.parseInt(Thread.currentThread().getName()); // 利用线程的名称,将数组分成若干小组
for (int i = c * gc; i < c * (gc + 1); i++) { // 每个线程通过名称获得分配的数组区间

synchronized (this) {                     //不加同步会出问题
if (a[i] == search) {
index.add(i); // 将数组下标放置到ArrayList中
count++; // 相同元素个数的累加
}
}
}
synchronized (this) {
threads++; // 线程结束个数 ,每个线程退出时thread加1;
}
}

public static void main(String args[]) {
J2ee r = new J2ee();
Thread[] t = new Thread[5];
r.setGroup(t.length); // 设置元素的分组数量
r.setSearch(555); // 设置要查找的数字555
for (int i = 0; i < t.length; i++) {
t[i] = new Thread(r, "" + i); // 用同一个Runnable构造线程,并用数字命名,名称有特殊用处,只能是数字
t[i].start();
}

while (r.threads != t.length) { // 已经结束的线程数量 != 线程组的数量,主线程循环等待
} // 线程组全部结束,循环退出
// Collections.sort(r.index);
// System.out.println(Arrays.toString(a)); // 打印数组内容
System.out.printf("与%s值相等的数有%s个\n", r.search, r.count);
System.out.println(r.index);// 打印相同数字的下标
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
永宝幼儿园地址好找么,我有些事要过去,
单选题梭伦出走后,企图推翻改革成果的是A.山
什么软件可以读英文单词,标准点的
弋阳县城市管理局办公位置在哪啊?好找么?
连衣长裙的衬裙一般多长
我很爱一个女孩子,可她却说我很幼稚,说对我
专家指出,“那种承诺‘一次通过’的所谓有机
2008年末全国人口为十三亿二千八百零二万人,
婴童店员工试用期个人小结怎么写
传说中灵异电话是多少?
山地车油碟在没有装轮子的情况下,捏刹车为什
怎么从沈阳转机到澳洲布里斯班?
求类似《宝贝,我知错了》《非同凡响的爱》《
一学生做了这样一个实验:将小球藻放在一只玻
龙山县湘西小数点童装专卖地址在什么地方,想
推荐资讯
电能并网时,电压一定得高于网电压吗,如果不
单选题唐代以纺织业闻名的北方城市是A.益州B.
下列命题中真命题的是A.二直线被第三条直线所
仪征市供电公司陈集供电营业厅办公位置在哪啊
沉香手串和紫檀手串哪个好
---Whois________inyourclass?---Fredis.A.t
博洛尼整体橱柜黔西店在什么地方啊,我要过去
有首歌前奏跟so.sick前奏差不多
单选题在农业生产中,人们常利用生物学原理来
车载电源转换器怎么用
那是一部农村的电视剧讲的是在一个什么河边上
我的女友是九尾狐国语配音在哪能看
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?