Comment rechercher des éléments dans une ArrayList? - Java
J'ai créé un programme To-Do-List en java où vous pouvez ajouter, supprimer et afficher des tâches avec des noms, des dates, des heures spécifiques, etc.
Cependant, j'essaie d'ajouter une option où, lorsque l'utilisateur sélectionne "5", il peut entrer une date et si des tâches tombent à cette date particulière, elles seront répertoriées.
Par exemple:
----------------------
Main Menu
----------------------
1. Add a task
2. Delete a task
3. Delete all tasks
4. List all tasks
5. Search for a task
6. Exit the program
Enter choice: 5
Enter a date: 20/10/2020
Here are the tasks for 20/10/2020:
-task1-
-task2-
etc...
Jusqu'à présent, lorsque je fais cela, aucune tâche ne revient même si elles existent à cette date spécifique.
Voici mon code jusqu'à présent: (searchTasks () est en bas du code)
import java.util.ArrayList;
import java.util.List;
import java.text.ParseException;
import java.util.Scanner;
class Task{
private String theTitle;
private String theDate;
private String theTime;
private String theLocation;
private String theDuration;
private String theCategory;
Task(String title, String date, String time, String location, String duration, String category) {
theTitle = title;
theDate = date;
theTime = time;
theLocation = location;
theDuration = duration;
theCategory = category;
}
public String getTitle() {
return theTitle;
}
public String getDate() {
return theDate;
}
public String getTime() {
return theTime;
}
public String getLocation() {
return theLocation;
}
public String getDuration() {
return theDuration;
}
public String getCategory() {
return theCategory;
}
public String getItem() {
return theTitle + ", " + theDate + ", " + theTime + ", " + theLocation + ", " + theDuration + ", " + theCategory;
}
}
public class ToDoList {
public Task myTaskObj;
private static List<String> currentList = new ArrayList<String>();
public ToDoList() {
}
public static void main (String[] args) {
ToDoList listObj = new ToDoList();
int menuItem = -1;
while (menuItem != 6) {
menuItem = listObj.printMenu();
switch (menuItem) {
case 1:
listObj.addItem();
break;
case 2:
listObj.removeItem();
break;
case 3:
listObj.removeAllTasks();
break;
case 4:
listObj.showList();
break;
case 5:
listObj.searchTasks();
break;
case 6:
System.out.println("Goodbye!");
default:
System.out.println("Enter a valid option");
}
}
}
public int printMenu() {
Scanner scanner = new Scanner(System.in);
System.out.println();
System.out.println("----------------------");
System.out.println("Main Menu");
System.out.println("----------------------");
System.out.println("1. Add a task");
System.out.println("2. Delete a task");
System.out.println("3. Delete all tasks");
System.out.println("4. List all tasks");
System.out.println("5. Search for a task");
System.out.println("6. Exit the program");
System.out.println();
System.out.print("Enter choice: ");
int choice = scanner.nextInt();
return choice;
}
public void showList() {
System.out.println();
System.out.println("----------------------");
System.out.println("To-Do List");
System.out.println("----------------------");
int number = 0;
for (String item : currentList) {
System.out.println(++number + ". " + item);
}
System.out.println("----------------------");
}
public void addItem() {
System.out.println("Add a task");
System.out.println("----------------------");
System.out.print("Enter the task title: ");
Scanner scanner = new Scanner(System.in);
String title = scanner.nextLine();
System.out.print("Enter the task date: ");
Scanner scanner2 = new Scanner(System.in);
String date = scanner2.next();
System.out.print("Enter the task time: ");
Scanner scanner3 = new Scanner(System.in);
String time = scanner3.nextLine();
System.out.print("Enter the task location: ");
Scanner scanner4 = new Scanner(System.in);
String location = scanner4.nextLine();
System.out.println("Enter the task duration (optional - press enter to skip): ");
Scanner scanner5 = new Scanner(System.in);
String duration = scanner5.nextLine();
System.out.println("Enter the task category (optional - press enter to skip): ");
Scanner scanner6 = new Scanner(System.in);
String category = scanner6.nextLine();
myTaskObj = new Task(title, date, time, location, duration, category);
String theItem = myTaskObj.getItem();
currentList.add(theItem);
System.out.println("Task Added!");
}
public void removeItem() {
System.out.println("Delete a task");
System.out.println("----------------------");
Scanner scanner = new Scanner(System.in);
System.out.print("What do you want to remove? (Enter number): ");
int index = scanner.nextInt();
if((index-1)<0 || index>currentList.size()) {
System.out.println("Wrong index number! Please enter in range of 1 to "+currentList.size());
}else {
currentList.remove(index-1);
}
System.out.println("----------------------");
System.out.println("Task Removed!");
}
public void removeAllTasks() {
System.out.println("Remove all tasks");
System.out.println("----------------------");
showList();
Scanner keyboard = new Scanner(System.in);
System.out.print("Are you sure you'd like to delete all tasks? 'Yes' or 'No': ");
String choice = keyboard.nextLine();
if(choice.equals("Yes")) {
currentList.removeAll(currentList);
System.out.println("All tasks deleted!");
}
else
if(choice.equals("No"))
System.out.println("Tasks not deleted");
}
public void searchTasks() {
System.out.println("Search for a task: ");
System.out.println("----------------------");
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter a date: ");
String date = keyboard.nextLine();
boolean flag = false;
for (String list: currentList){
String searched_date = list.split(", ")[1];
if (searched_date.equals(date)){
flag = true;
break;
}
}
}
}
En plus de la réponse de keyboardwarrior, oui une façon de le faire aurait été d'avoir List<Tast> currentList
comme ArrayList
.
Cependant, si vous ne souhaitez pas modifier votre code, vous pouvez le contourner en procédant ainsi:
1) Parcourez les éléments (de type String
) dans votre currentList
2) Divisez l'élément en utilisant le ", "
comme séparateur, c'est-à-dire item.split(", ")
3) Pendant votre conversion en Chaîne entre getItem()
, la date est la deuxième chose que vous ajoutez à la chaîne, c'est-à-dire la première chose après la première virgule (,).
Alors, item.split(", ")[1]
qu'est-ce qui va contenir la date.
4) Comparez cela à la date que vous souhaitez rechercher, dans chaque boucle. Cassez quand vous le trouvez.
boolean found = false;
for (String task: currentList){
String searched_date = task.split(", ")[1];
if searched_date.equals(date){
found = true;
System.out.println(task);
}
}
if (!found){ // if there was no task found for the specified date
System.out.println("No Task Found");
}