Comment faire une liste de tâches fonctionnelle en java


J'essaie de faire une liste de tâches fonctionnelle avec une limite de 10 éléments, mais j'ai un problème avec deux choses majeures dans la liste des tâches.

Le premier est qu'après avoir compilé et exécuté le programme et sélectionné pour ajouter des éléments à la liste, cela fonctionne correctement, mais si j'ajoute deux éléments et la sentinelle "stop", lorsque je sélectionne l'option suivante pour imprimer la liste des tâches, je suis présenté avec une liste, montrant mes deux éléments, puis la sentinelle stop avec 7 valeurs nulles dans la liste. Donc, le premier problème que j'ai est de me débarrasser des valeurs nulles, j'ai essayé d'utiliser un compteur comme vous pouvez le voir dans mon code, mais cela ne s'est pas avéré efficace.

Le prochain problème que j'ai est que j'essaie de faire en sorte que vous puissiez ajouter à la liste, donc une fois que vous avez choisi d'ajouter plus de choses à la liste, les nouvelles options que l'utilisateur écrit, réécrit dessus dans le tableau et imprime les nouvelles valeurs et non avec les anciennes. Je pars du principe que qui peut être fait grâce à une sorte de méthode de récursivité, mais j'ai du mal à le comprendre.

Toute aide serait grandement appréciée!

Merci!

import java.util.Scanner;

public class ToDo {
public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    final int MAX = 10;

    String[] list = new String[MAX];
    int choice = 0;

    while (choice != 3) {

        System.out.println();
        System.out.println("Type 1 to add a new thing to your to do list.");
        System.out.println("Type 2 to print the to do list.");
        System.out.println("Type 3 to exit the program.");
        System.out.print("Select an option: ");
        choice = input.nextInt();
        int count = 0;

        if (choice == 1) {
            System.out.println("Keep hitting enter after to do's, if you want to stop, type 'stop'.");
            for (int i=0;i<MAX;i++) {
                list[i] = input.nextLine();
                if (list[i].equals("stop")) break;
                count++;
            }
        }

        if (choice == 2) {
            for (int index = 0;index < list.length; index++) {
                System.out.println(list[index]);                    
            }               
        }

    }

}
}
Author: Vadim Kotov, 2015-07-01

3 answers

Comme je l'ai mentionné dans le commentaire, vous pouvez utiliser un ArrayList au lieu de String[] pour faciliter votre traitement.

Mais si vous voulez utiliser le tableau lui-même, il y a 3 problèmes mineurs avec votre code.

Dans votre choix 1 pour la boucle, démarrez la boucle à partir de count,

    for (int i=count;i<MAX;i++) {
        list[i] = input.nextLine();
        if (list[i].equals("stop")) break;
        count++;
    }

Dans votre choix 2 pour la boucle, terminez la boucle avant d'atteindre count,

    for (int index = 0;index < count; index++) {
        System.out.println(list[index]);                    
    }               

Et déplacez votre initialisation count en dehors de la boucle while.

int count = 0;

Mais attention, si vous décidez d'implémenter en supprimant les tâches, cela pourrait devenir compliqué et l'utilisation de ArrayList deviendrait beaucoup plus simple.

 2
Author: Codebender, 2015-07-01 04:42:29

Au lieu d'utiliser un tableau de chaînes de taille fixe, utilisez une liste de chaînes. Ensuite, vous pouvez y ajouter des éléments au fur et à mesure.

Assurez-vous de

import java.util.ArrayList;
La syntaxe de la déclaration

Est

ArrayList<String> myList = new ArrayList<String>();

Ajoutez des éléments à votre liste avec la méthode add ():

myList.add(input.nextLine())

Vous n'avez pas besoin de cette boucle for interne, mais sortez de la boucle while des options d'entrée lorsque vous l'avez parcourue 10 fois.

Pour résoudre votre problème de "stop" dans votre liste, vérifier que l'entrée est "stop", et stop, avant vous essayez d'ajouter à la liste.

 1
Author: paisanco, 2015-07-01 04:41:30

, Il est préférable d'utiliser ArrayList, mais si vous voulez toujours de coller à String[], puis le programme suivant va travailler pour vous:

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        final int MAX = 10;
        String[] list = new String[MAX];
        int choice = 0;

        while (choice != 3) {
            System.out.println();
            System.out.println("Type 1 to add a new thing to your to do list.");
            System.out.println("Type 2 to print the to do list.");
            System.out.println("Type 3 to exit the program.");
            System.out.print("Select an option: ");
            choice = input.nextInt();
            String userEnteredItem;
            if (choice == 1) {
                System.out.println("Keep hitting enter after to do's, if you want to stop, type 'stop'.");
                for (int i=0;i<MAX;i++) {
                    userEnteredItem = input.nextLine();
                    if(!userEnteredItem.isEmpty()) {
                        list[i] = userEnteredItem;
                        if (userEnteredItem.equals("stop"))  {
                            break;
                        }
                        count++;
                    } else {
                        i--; // Do not increase index for empty item.
                    }
                }
            }
            else if (choice == 2) {
                for (int index = 0;index < count; index++) {
                    System.out.println(list[index]);
                }
            }
            else {
                input.close();
            }
        }
    }

Il garde une trace des éléments utilisateur dans static int count et il ferme également le scanner lorsque vous n'en avez pas besoin.

 1
Author: i_am_zero, 2015-07-01 04:43:55