-
November 23rd, 2016, 09:03 PM
#1
Parallel Linear Search
I wasn't sure if I should post it in the Java or Multithreading thread.
So I have to make a Parallel Linear Search program with 2 threads and then return where it was found in the array. the user can see what is in the array and the enter a number.
The problem I am having is, I'm not getting the results I should be getting. When I search for an object in the first half the array I can get bad results.
For example:
11 0 18 3 4 9 1 4 18 19
Enter the search value: 0
Target was not found
Now if I search for in the second half I get
16 17 11 0 6 18 12 4 3 0
Enter the search value: 4
Target was found at 3
Which is correct, but only partially correct. The real location is 8. I attempt to try and add 5 to the location found in the second half within the second thread.
Here is my code
Code:
package ParLin;
import java.util.Scanner;
import java.util.Random;
public class ParLinSearch {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i; //loop control variable
int[] ranArray, firstHalf ,secondHalf; //declare 3 arrays
//initialize array sizes
ranArray = new int[10];
firstHalf = new int[5];
secondHalf = new int[5];
//RNG
Random ranGen = new Random();
Scanner scan = new Scanner(System.in);
//Build array of random integers
for (i = 0; i < 10; i++){
int ran = ranGen.nextInt(20); //Randomly generates number (0 - 19)
ranArray[i] = ran; //add number to array
System.out.print(ran + " "); //print out array value
}
System.out.println("");
System.out.print("Enter the search value: ");//user prompt
int target = scan.nextInt();
//Split array in half for the threads to search
System.arraycopy(ranArray, 0, firstHalf, 0, 5);
System.arraycopy(ranArray, 5, secondHalf, 0, 5);
//Create 2 threads and start passing over each of the array
Thread1 t1 = new Thread1(firstHalf, target);
t1.start();
Thread1 t2 = new Thread1(secondHalf, target);
t2.start();
try {
t1.join();//bring back the values from thread 1
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
t2.join();//bring back the values from thread 2
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("");
if(t1.getCheck() == 0){//it was found
System.out.println("Target was found at " + t1.getLocation());//print where it was found
}
else if(t2.getCheck() == 0 && t1.getCheck() == 1){
int location2 = t2.getLocation();
location2 += 5;
System.out.println("Target was found at " + location2);//print where it was found
}
if (t1.getCheck() == 1 && t2.getCheck() == 1){//wasn't found
System.out.println("Target was not found");//let the user know
}
}
}
Thread1 class
Code:
package ParLin;
public class Thread1 extends Thread{
private static int check;
private static int location;
public int[] thread1Half;//half of array to search
public int target1;//target value
public Thread1(int[] firstHalf, int target) {
//constructor for firstHalf and target
this.thread1Half = firstHalf;//copy array
this.target1 = target;//copy target
}
public void run(){
check =1;//1 if not found, 0 if found
location = 0;//location of where the value was
for(int i =0; i < 5; i++){
if (thread1Half[i] == target1){//if the value at the current location is there
location = i;//location equal to i
location++;//make the location more realistic than array location
check = 0;//change check to = 0 so can report back it was found
break;//break and return back to the main
}//end if
}//end for
}//end run method
public int getCheck(){
return this.check;
}
public int getLocation(){
return this.location;
}
}//end Thread1 class
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|