-
Notifications
You must be signed in to change notification settings - Fork 0
/
TaskSearcher.java
68 lines (56 loc) · 2.74 KB
/
TaskSearcher.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import java.util.LinkedList;
import javax.swing.JOptionPane;
public class TaskSearcher {
private HashTable hashTable;
public TaskSearcher(HashTable hashTable) {
this.hashTable = hashTable;
}
public Task searchTask(String taskName) {
// Implement the Boyer-Moore string search algorithm here
// to search for the task in the hash table
// Return the task if found, or null if not found
// Create an array to store the skip values for each character in the pattern
int[] skip = new int[256];
// Initialize the skip values to the length of the pattern
for (int i = 0; i < skip.length; i++) {
skip[i] = taskName.length();
}
// Calculate the skip values for each character in the pattern
for (int i = 0; i < taskName.length() - 1; i++) {
skip[taskName.charAt(i)] = taskName.length() - i - 1;
}
// Initialize the text and pattern pointers
int textPointer = 0;
int patternPointer = taskName.length() - 1;
// Search for the pattern in the text
while (textPointer <= hashTable.size() - taskName.length()) {
// Get the list from the hash table
LinkedList<Task> taskList = hashTable.get(textPointer);
// Check if the list is not empty
if (taskList!= null &&!taskList.isEmpty()) {
// Compare the characters in the pattern with the characters in the text
while (patternPointer >= 0 && taskName.charAt(patternPointer) == taskList.get(0).getName().charAt(0)) {
patternPointer--;
}
// If the pattern was found, return the task
if (patternPointer < 0) {
Task task = taskList.get(0);
JOptionPane.showMessageDialog(null, "Task found: " + task.getName() + "\nDescription: " + task.getDescription() + "\nCreation Date: " + task.getCreationDate() + "\nDue Date: " + task.getDueDate() + "\nStatus: " + task.getStatus() + "\nPriority: ", "Task Details", JOptionPane.INFORMATION_MESSAGE);
return task;
}
}
// Update the text pointer using the skip value for the mismatched character
try {
if (taskList!= null &&!taskList.isEmpty()) {
textPointer += skip[taskList.get(0).getName().charAt(0)];
} else {
textPointer++;
}
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
patternPointer = taskName.length() - 1;
}
// Return null if the pattern was not found
return null;
}}