Java 使用线程在数组中搜索元素

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

我有以下作业要做: 实现对数组中指定元素的并行搜索。将线程数用作函数参数。每个线程检查自己的数组块大小(ArraySize/NumberOfThreads)

类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();
        }
    }
}