0
votes

Méthode Java pour trouver une correspondance dans ArrayList

J'ai la méthode suivante dans un programme de mien qui permet à un utilisateur de saisir un identifiant unique associé à un ordinateur portable dans une arrayliste.

La sortie souhaitée est la suivante: p>

  • Si l'ID saisi par l'utilisateur correspond à un ID dans la liste ArrayList, l'ordinateur portable et ses spécifications imprimeront. LI>
  • Si l'identifiant ne correspond pas, il imprimera "ID invalide". LI> ul>

    Je suis très proche de la réalisation de cela; Cependant, je ne peux comprendre que comment l'obtenir d'imprimer si elle correspond ou non pour chaque ordinateur portable dans la liste. Ainsi, par exemple, si l'ID saisi par l'utilisateur correspond à l'une des trois ordinateurs portables dans la liste, il imprimera comme suit: P>

    Acer prédateur Helios 300 CPU: Intel I7-9750H GPU: NVIDIA GTX1660TI Mémoire: 16 Go : 1234567 p>

    ID invalide. P>

    ID invalide. P>

    Donc, ma question est la suivante: Comment puis-je l'obtenir pour imprimer uniquement le match unique ou "ID invalide" Tout en étant capable de boucler toute la liste pour vérifier un match? Ne vous demandez pas nécessairement que la cuillère me nourrir le correctif, mais au moins aider à me diriger dans la bonne direction ou à aider avec la logique. Je vous remercie d'avance pour toute aide! P>

    Ma méthode est la suivante: P>

    private static void findLaptop(ArrayList arr) {
    
        //Prompt user to input an ID.
        System.out.println("Input ID: ");
        System.out.println();
    
        //Scan for user input.
        Scanner keyboard = new Scanner(System.in);
        int inputId = keyboard.nextInt();
    
        //Loop through ArrayList and check for a match.
        for(int i=0; i<arr.size(); i++) {
    
            //If entered ID matches, print laptop information.
            if(inputId == ((Laptops) arr.get(i)).getId()) {
                System.out.println(((Laptops)arr.get(i)).getModel() + " CPU: " + ((Laptops)arr.get(i)).getCpu() + " GPU: " +
                        ((Laptops)arr.get(i)).getGpu() + " Memory: " + ((Laptops)arr.get(i)).getMemory() + "GB ID: " + 
                        ((Laptops)arr.get(i)).getId());
            }
            //If entered ID does not match, print invalid ID.
            else if(inputId != ((Laptops) arr.get(i)).getId()) {
                System.out.println("Invalid ID.");
            }
        }
    }
    


3 commentaires

En dehors de votre boucle - Créez une variable de type ordinateur portable et définissez-la sur NULL. Dans la boucle, si vous trouvez une correspondance, attribuez-la à la variable. Après la boucle, vérifiez si la variable est NULL - si oui, imprimez "ID invalide", sinon imprimez les détails de l'ordinateur portable à partir de la variable. est-ce que cela aide?


@Riaannel Cela aide énormément. Je pense que c'est la route que je vais utiliser pour atteindre ce que je veux. Je me luttais avec elle et vous l'avez présenté de manière très facile à comprendre tout en le laissant pour moi. Ne peut pas vous remercier assez.


Vous pouvez rompre de la boucle en utilisant un mot-clé pause s'il y a une correspondance. A également avoir une variable en dehors de la boucle qui stocke l'ordinateur portable correspondant. Déplacez SOP en dehors de la boucle.


3 Réponses :


1
votes

Vous pouvez le faire à l'aide d'une instruction de retour utilisé après l'impression d'un match xxx

édition

Si vous avez vous ArrayList Configurez correctement en tant que ArrayList , vous n'avez pas besoin de toutes ces coulées folles.

Edit2 < / strong>

si vous un foreach La boucle serait encore plus propre xxx


7 commentaires

Corrigez-moi si je me trompe, mais cette impression "ID invalide". Chaque fois que la méthode est appelée, quel que soit le cas s'il y avait une correspondance ou non? De plus, je peux dire à mon arraylist d'imprimer et cela va bien, mais il ira comment ils imprimeront généralement (avec le nom de l'arraylist, puis entre crochets, le nom de chaque jeu de paramètres égal à sa valeur), et cela ne 'T correspond au format requis dont j'ai besoin.


Non, parce que vous êtes retourner à partir de cette méthode après avoir imprimé le match


J'ai compris. Merci, votre solution le plus certainement fonctionnerait!


@Brandonbischoff a écrit aussi, je peux dire à mon arraylist à imprimer et cela va bien, mais il imprimera comment ils impriment généralement (avec le nom de l'arraylist, puis à l'intérieur des supports de chaque jeu de paramètres égal à leur valeur), et cela ne correspond pas au format requis que j'ai besoin - veuillez relire ce que j'ai posté. Je ne vous dis pas d'utiliser ArrayList pour modifier l'impression.


Je l'ai relu et je suppose que je ne comprends tout simplement pas. Je fais ma liste configurée en tant que ArrayList . Je suppose que je ne connais tout simplement pas la bonne façon de lui demander d'imprimer ce que je veux sans les moulages. C'est le premier programme que j'ai écrit qui utilise une arraylist BTW


Changez votre méthode sur Statique Statique Findlaptop (ArrayList Art) , puis vous n'avez pas besoin de couler et fait le type de méthode de sécurité


Informations superest utiles qui aideront certainement à la nettoyer. Merci beaucoup!



2
votes

Utilisez ci-dessous Code:

    //Create a boolean
    boolean found= false; 
    for(int i=0; i<arr.size(); i++) {
        //If entered ID matches, print laptop information.
        if(inputId == ((Laptops) arr.get(i)).getId()) {
            System.out.println(((Laptops)arr.get(i)).getModel() + " CPU: " + ((Laptops)arr.get(i)).getCpu() + " GPU: " +
                    ((Laptops)arr.get(i)).getGpu() + " Memory: " + ((Laptops)arr.get(i)).getMemory() + "GB ID: " + 
                    ((Laptops)arr.get(i)).getId());
                    //set boolean true and break
                    found = true;
                    break;
        }
    }
  //Out side the look check If entered ID does not match, print invalid ID.
    if(!found) {
       System.out.println("Invalid ID.");
    }


0 commentaires

1
votes

supposant que vous avez une classe appelée ordinateur portable comme suit: xxx

Vous pouvez trouver des correspondances avec un identifiant à l'aide de java 8 flux: xxx

la variable résultat est un en option , ce qui signifie qu'il est peut ou non contenir un ordinateur portable valeur. Vous pouvez consommer ce résultat comme suit: xxx


0 commentaires