Récupérer contenu d'un tableau à partir d'une liste

Fermé
jj1k Messages postés 30 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 3 septembre 2017 - Modifié le 14 juin 2017 à 08:18
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 14 juin 2017 à 19:30
Bonjour,

int Cap = 5;
String débuttournée;
ArrayList al = new ArrayList();
Cvs newOb = new Cvs();
for (int i = 0; i < table.length; i++) {
    newOb = (Cvs) table[i];
    if (al.isEmpty() == true) {
        if (Cap > newOb.capacite) {
            Cap = Cap - newOb.capacite;
            al.add(newOb.origin);
            (newOb.to) = newOb.eo;
            (newOb.td) = newOb.to + newOb.DTD;
            al.add(newOb.destination);
            Cap = Cap - newOb.capacite;
            System.out.println(Cap);
            i++;
            System.out.println(al.size());
        }
    } else {
        for (int j = 0; j < al.size(); j++) {
            System.out.println(al.get(j));
            if (al.get(j) + dist(al.get(j), newOb.eo) < newOb.lo) {
            }
        }
    }
}

newOb c'est un objet qui à comme champs (id, origin,to,destination, td, capacite, eo, em, dtm, dtd, lo, ed, ld)
j'ai tésté ma liste est si vide je la rempli avec al.add(newOb.origin); et al.add(newOb.destination);
et aprés je parcours cette liste et je veux récupérer newOb.eo d'apres l'origine !
comment je peux le faire ?

aidez moi s'il vous plait
A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
14 juin 2017 à 09:07
Bonjour,

Il faut que tu crées et manipule des méthodes dans ta classe Cvs.

Ce genre de code :
 (newOb.to) = newOb.eo;
(newOb.td) = newOb.to + newOb.DTD;
Ça ne concerne que newOb donc c'est uniquement à lui de s'occuper de son changement d'état.

Pour le reste ton code est incomplet pour que l'on puisse tester mais pour donner quelquechose de bien il va falloir beaucoup de ménage dans le code.

En particulier tu ne devrais pas mélanger modification de données et affichage. Les println n'ont rien à faire là, il faut que ta méthode renvoie un résultat et c'est ce résultat que tu afficheras.
0
jj1k Messages postés 30 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 3 septembre 2017
Modifié le 14 juin 2017 à 16:48
J'ai fais l'affichage pour voir si le code ça marche ou pas !


je veux lorsque je rempli la liste avec une valeur provenant d'un tableau je peux accéder aux autres valeurs du tableau à partir du valeur inséré dans la liste




voici le code complet


package list;


import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import FIPA.stringsHelper;
import jade.core.Agent;
import jade.core.behaviours.Behaviour;
import jade.core.behaviours.CyclicBehaviour;
import jade.core.behaviours.FSMBehaviour;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.UnreadableException;
@SuppressWarnings("serial")

public class Linkedlist extends Agent 
{
    protected String role;
 List<Cvs> listCvs = new LinkedList<Cvs>();
 //
 protected void setup(){
    
    System.out.println("---------------------------------------");
    System.out.println("----------------agent c----------------");
    System.out.println("---------------------------------------");
    
    FSMBehaviour agentA_beh= new FSMBehaviour();
    
    agentA_beh.registerFirstState(new attendreAgentB(), "attendreAgentB");
  
    addBehaviour(agentA_beh);  
    
    


    
  }
 
 
 private class attendreAgentB extends CyclicBehaviour{



  int Cap=5 ;
  String débuttournée ;
     ArrayList al = new ArrayList();
     LinkedList<Cvs> listedemande = new LinkedList<Cvs>();

    @Override
    public void action() {
    
   String x;

     Object[] table=null;

     
     ACLMessage aclMessage = receive();
         
          if (aclMessage!=null) {
           
           try {
            
    table= (Object[]) aclMessage.getContentObject();
    
    
   } catch (UnreadableException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
    
 
            Cvs newOb = new Cvs();
    for (int i = 0; i < table.length; i++) 
    {
     newOb = (Cvs) table[i];
     

     
      if (al.isEmpty()==true)   
     
      {

                             
       if (Cap > newOb.capacite ){
        Cap= Cap-newOb.capacite;
        al.add(newOb.origin);
        (newOb.to)= newOb.eo;  
        
        (newOb.td)= newOb.to+ newOb.DTD;
        al.add(newOb.destination);
        Cap= Cap - newOb.capacite;
        
        System.out.println(Cap);
        i++;  
        
        
       }

      } 
     
      else {   
         for(int j = 0; j < al.size(); j++)  

         {
         System.out.println(al.get(j));
         if ( al.get(j) + dist(al.get(j) , newOb.eo )< newOb.lo ) 
         {
          
          
          al.add(newOb.origin); 
          
          newOb.to= al.get(j)+ dist(newOb.origin, al.get(j)); 
          
           
          
          
          
          
         } 

      
        
       }
         
       }
       
      } 
     }

     
   
     
     
   
     
   
          
              
          }
     
     

    
      
            
    
              
              
                 block();
    }
  }


  
  public void addBehaviour(String role, Behaviour b)
  {
   addBehaviour(b);
   this.role = role;
  }
  
}






newOb.to= al.get(j)+ dist(newOb.origin, al.get(j));

je veux apres al.get(j) il s'affiche liste des champs


Merci d'avance
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
14 juin 2017 à 19:30
Et ce code compile !?

Comment tu fais par exemple pour avoir
if (al.get(j) + dist(al.get(j), newOb.eo) < newOb.lo)
avec une
ArrayList al = new ArrayList();
?
al.get(j)
va renvoyer un Object or on ne peut pas utiliser
+
dans ce cas !

Bref ton code c'est vraiment le bazar... Revenons donc directement à la question :
"je veux lorsque je rempli la liste avec une valeur provenant d'un tableau je peux accéder aux autres valeurs du tableau à partir du valeur inséré dans la liste"

C'est loin d'être super clair, mais si je comprends bien, il faudrait que tu stockes la valeur ainsi que le tableau associé dans ta liste et pas juste la valeur seule.
Comme ça en recherchant dans ta liste la valeur souhaitée tu trouveras le tableau attendu puisqu'il est stocké avec.

Exemple :

public class ValueWithComplement<V, C> {
    private final V value;
    private final C complement;

    public ValueWithComplement(V value, C complement) {
        this.value = value;
        this.complement = complement;
    }

    public V getValue() {
        return value;
    }

    public C getComplement() {
        return complement;
    }

    public static <V, C> C searchValueIn(V value,
            Stream<ValueWithComplement<V, C>> stream) {
        return stream
                .filter(x -> value.equals(x.value))
                .map(x -> x.getComplement())
                .findAny().orElse(null);
    }
}

public class Test {
    public static void main(String[] args) {
        String[] tabA = { "a0", "a1", "a2" };
        String[] tabB = { "b0", "b1", "b2" };
        List<ValueWithComplement<String, String[]>> list = Arrays.asList(
            new ValueWithComplement<>("a1", tabA),
            new ValueWithComplement<>("b0", tabB)
        );

        System.out.println(Arrays.toString( // [a0, a1, a2]  
                ValueWithComplement.searchValueIn("a1", list.stream())));

        System.out.println(Arrays.toString( // [b0, b1, b2]
                ValueWithComplement.searchValueIn("b1", list.stream())));
    }
}
0