Java 使用线程在数组中搜索元素
我有以下作业要做: 实现对数组中指定元素的并行搜索。将线程数用作函数参数。每个线程检查自己的数组块大小(ArraySize/NumberOfThreads)Java 使用线程在数组中搜索元素,java,arrays,multithreading,Java,Arrays,Multithreading,我有以下作业要做: 实现对数组中指定元素的并行搜索。将线程数用作函数参数。每个线程检查自己的数组块大小(ArraySize/NumberOfThreads) 类MyThread扩展线程{ 最终int[]搜索选项卡; 最终整数范围_选项卡[]; 最终整数搜索值; 静态int searchIndex=-1; 静态布尔值isWorking=true; int-whichThread; MyThread(int[]searchTab,int[]ranetab,int searchValue,int wh
类MyThread扩展线程{
最终int[]搜索选项卡;
最终整数范围_选项卡[];
最终整数搜索值;
静态int searchIndex=-1;
静态布尔值isWorking=true;
int-whichThread;
MyThread(int[]searchTab,int[]ranetab,int searchValue,int whichThread){
搜索选项卡=搜索选项卡;
范围选项卡=范围选项卡;
搜索值=搜索值;
this.whichThread=whichThread;
}
@凌驾
公开募捐{
对于(int i=RANGE_TAB[whichThread][0];i
此代码通常可以工作,但在实现一个线程时找不到索引。顺便问一下,我的老师说我的代码太长太复杂了,有什么建议吗
我将非常感谢您的帮助。以下代码如何:
public class Searcher implements Runnable {
private int intToFind;
private int startIndex;
private int endIndex;
private int[] arrayToSearchIn;
public Searcher(int x, int s, int e, int[] a) {
intToFind = x;
startIndex = s;
endIndex = e;
arrayToSearchIn = a;
}
public void run() {
for (int i = startIndex; i <= endIndex; i++) {
if (arrayToSearchIn[i] == intToFind) System.out.println("Found x at index: " + i);
}
}
}
public class Starter {
public static void main(String[] args) {
int[] a = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int numberOfThreads = 5;
int x = 20;
findElement(numberOfThreads, x, a);
}
private static void findElement(int numberOfThreads, int x, int[] a) {
int sizeOfa = a.length;
int range = sizeOfa/numberOfThreads;
for (int i = 0; i <= numberOfThreads-1; i++) {
Thread searcher;
if (i == numberOfThreads-1) {
searcher = new Thread(new Searcher(x, i*range, sizeOfa-1, a));
} else {
searcher = new Thread(new Searcher(x, i*range, i*range+range-1, a));
}
searcher.start();
}
}
}
公共类搜索器实现可运行{
私人int intToFind;
私人int startIndex;
私有内部索引;
私有int[]阵列搜索;
公共搜索器(int x、int s、int e、int[]a){
intToFind=x;
startIndex=s;
endIndex=e;
arrayToSearchIn=a;
}
公开募捐{
对于(int i=startIndex;i顺便说一句,我的老师说我的代码太长太复杂了。有什么建议吗?
长是不可避免的;复杂不是。你的代码中没有一条注释。没有明确的格式标准。在某些部分,这是一堵代码墙。这个问题似乎离题了,更适合你您可以使用吗?顺便说一句。如果您想知道为什么我使用implements Runnable而不是extends Thread,原因如下:但是,extends Thread也可以工作。
public class Searcher implements Runnable {
private int intToFind;
private int startIndex;
private int endIndex;
private int[] arrayToSearchIn;
public Searcher(int x, int s, int e, int[] a) {
intToFind = x;
startIndex = s;
endIndex = e;
arrayToSearchIn = a;
}
public void run() {
for (int i = startIndex; i <= endIndex; i++) {
if (arrayToSearchIn[i] == intToFind) System.out.println("Found x at index: " + i);
}
}
}
public class Starter {
public static void main(String[] args) {
int[] a = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int numberOfThreads = 5;
int x = 20;
findElement(numberOfThreads, x, a);
}
private static void findElement(int numberOfThreads, int x, int[] a) {
int sizeOfa = a.length;
int range = sizeOfa/numberOfThreads;
for (int i = 0; i <= numberOfThreads-1; i++) {
Thread searcher;
if (i == numberOfThreads-1) {
searcher = new Thread(new Searcher(x, i*range, sizeOfa-1, a));
} else {
searcher = new Thread(new Searcher(x, i*range, i*range+range-1, a));
}
searcher.start();
}
}
}