-1
votes

Diviser une liste de valeurs basée sur une valeur dans une liste à l'aide de Java

considérer une liste de valeurs longues [1,2,3,4,2,3,6,3,7,3] . Je dois mettre en œuvre le programme Java pour scinder la liste en fonction de la valeur. Disons valeur = 3 . Chaque fois que je trouve valeur = 3 . J'ai besoin de diviser la liste de manière à ce que [[1,2], [3], [4,2], [3], [6], [3], [7], [3], [3]] .

J'ai écrit le code ci-dessous pour implémenter l'énoncé de problème: xxx

sortie: [[1, 2], [3 ], [4, 2], [3], [6], [3]]

Sortie attendue: [[1,2] [3], [4,2], [3], [6], [3], [7]]

Le dernier numéro [7] ne s'ajoute pas au finalton . Toute suggestion!


2 commentaires

Tout d'abord, vous n'ajoutez pas ces valeurs [1,2,3,4,2,3,6,3,7,3] à la liste. Veuillez conserver votre entrée et l'entrée dans le code cohérent.


Après votre boucle pour la boucle, la liste TEMP contient 7. Vous devez donc ajouter ici la liste finale.


3 Réponses :


-1
votes

Essayez-le comme ceci:

public static void main(String[] args) {
    // The number you want to split by
    int delimiter = 3;
    List<Integer> input = Arrays.asList(5, 3, 10, 4, 3, 5, 6, 3, 4);

    List<List<Integer>> result = new ArrayList<>();
    result.add(new ArrayList<>()); // Add a list so that we have something to work with

    for (int i = 0; i < input.size(); i++) {
        // Get the next value in the list
        int val = input.get(i);

        // If the current value equals the one we want to split by...
        if (val == delimiter) {
            //... add a new list containing only the delimiter...
            result.add(Arrays.asList(delimiter));

            //... and add a new list so the other values will be added correctly
            result.add(new ArrayList<>());
        } else // if this is just a random number, add it to the last list
            result.get(result.size() - 1).add(val);
    }

    // If the last number in your input is equal to the delimiter, there will be an empty
    // list at the end, which can be prevented this way
    if (result.get(result.size() - 1).size() == 0)
        result.remove(result.size() - 1);

}


5 commentaires

Veuillez ajouter un certain contexte autour de votre réponse et ne pas simplement publier le code.


Sur une note latérale, si vous avez pris le temps d'écrire la réponse, veuillez également prendre un certain temps pour poster une solution complète. Ne laissez pas // votre liste et ajoutez une liste d'échantillons là-bas.


Gardez également vos noms de variables compatibles avec les noms de variable dans la question. Cela ne pourrait être qu'une partie du code de l'OP.


Il y a un [] [] dans le résultat .


@HARSHALPAREKH Vous avez raison, j'ai ajouté des commentaires et je vais corriger ce vide [] . Je vais cependant utiliser des noms de variables que je suis le plus à l'aise, car si je vais poster une solution pour OP ici, le moins qu'elles puissent faire est de changer les noms de variable eux-mêmes.



0
votes

Le problème est que vous ajoutez la liste de départ complète de votre tableau,

à la place, vous devez garder un autre tableau à l'esprit afin que vous puissiez pousser celui-ci lorsque vous venez accrocher A 3. P>

List<Integer> list_i_want_to_push = new ArrayList<>();
for (int i =0; i < list.size(); i++){
              list_i_want_to_push.add(list.get(i));

              if(val == list.get(i)){
                  list_i_want_to_push.remove(i);
                  finalList.add(list_i_want_to_push);
                  finalList.add(Arrays.asList(val));
                  list_i_want_to_push = []; //empty your array
              }

             }
             System.out.println(finalList);


2 commentaires

Vous ne compilez pas. Il est Liste , pas Liste . Note latérale: list_i_want_to_push Ce n'est pas style Java. Arrays.Aslist (VAL) Renvoie une liste fixe, aucune modification ne peut être apportée à cela à l'avenir si nécessaire.


@HARSHALPAREKH, OW DAMN! Je ne connaissais pas la deuxième partie de votre commentaire !! Thx mate, type fixe!



0
votes

Je crois que cela fait ce que vous voulez, mais je devais faire des hypothèses.

  • Si des numéros de fractionner adjacents se produisent, mettez-les simplement dans leur propre liste et d'ajouter à la liste finale.
  • suppose que la liste peut démarrer et / ou se terminer par un ou plusieurs numéros de scission. xxx

    impression xxx


0 commentaires