Un point comme argument d'une fonction java

sabrinaSbina Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
sabrinaSbina Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -
bonsoir,
j'ai un algorithme implimenté en matlab.puisque jai besoin d'une version en java, jai choisi d'utiliser l'outil MATLAB java builder pour generer les packages et le fichier .jar necessaire.
Dans jave, j'ai crée ce classe pour appeler la fonction principale de l'algorithme(r_nsga_2)

import com.mathworks.toolbox.javabuilder.MWException;
import Sabrine.*;
public class drive {

public drive() {
// TODO Auto-generated constructor stub
}

/**
* @param args
*/
public static void main(String[] args) {
Rnsga2essai x = null;
Object [] result= null;
try {
x= new Rnsga2essai();
result=x.r_nsga_2(20,50,[0.2 0.5],0.6);
System.out.println(result);
} catch (MWException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
le problème qu'il n'accepte pas le 3eme argument de la fonction qui est les coordonnées d'un point de préférence.meme lorsque je fais une classe Point a part et je fais l'appel a une instance crée , toujours il ya une erreur :(.stp qui peut maider?
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Quand tu as une erreur, ce serait bien de nous donner son intitulé, c'est en général utile !

Il faudrait voir comment tu as fait la classe Rnsga2essai et quel est le type des valeurs attendues pour r_nsga_2, mais vu ce que tu en dis ça pourrait être comme ça :

public static void main(String...args) throws MWException
{
    Rnsga2essai x = new Rnsga2essai();
    Object[] result = x.r_nsga_2(20,50,new Point(0.2,0.5),0.6);

    if (result!=null)
        for (Object r : result)
            System.out.println(r);
}
La confiance n'exclut pas le contrôle
0
sabrinaSbina Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
la meme erreur: Exception in thread "main" java.lang.RuntimeException: Tried to create mxArray of unsupported type. Java type: Point
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu n'as pas donné le type des valeurs attendues par r_nsga_2, il est indispensable de les connaitre pour ne pas provoquer d'exception !
Vu ton message d'erreur j'imagine que ce qui est attendu est un mxArray, mais c'est difficile à dire car ce n'est plus vraiment du Java, ça va dépendre des bibliothèques que tu utilises pour manipuler Matlab.

Exemple avec com.sun.jna.Pointer (JNA) et net.lunglet.matlab.MXArray (array4j)

private static MXArray toArray(double...tab)
{
    Pointer pointer = new Pointer();
    pointer.write(0,tab,0,tab.length);
    return new MXArray(pointer);
}

Rnsga2essai x = new Rnsga2essai();
Object[] result = x.r_nsga_2(20,50,toArray(0.2,0.5),0.6);
0
sabrinaSbina Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Non plus :(. la fonction r_nsga_2 donne comme output une population d'individus classifiées selon l'ordre de dominance classique et selon les préférences de décideur. ce point est un point de référence de décideur dans notre cas.vraiment, je sais pas comment faire :/
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je ne te demande pas ce que donne l'output, je vois bien que c'est un Object[], et à la limite à quoi ça sert n'a pas d'importance ici. Ce qu'il faut savoir c'est le type des valeurs attendues en arguments.
Il faut donc retrouver la définition de la méthode r_nsga_2 dans ta classe Rnsga2essai et la donner, parce que sinon on ne s'en sortira jamais, je pourrais toujours faire des Point, des MXArray et continuer de jouer aux devinettes, mais toi tu as la réponse sous le nez !

Ça doit être quelque chose comme cela :
public Object[] r_nsga_2(int, int, ????, double)
0
sabrinaSbina Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
c'est de type double .En matlab, les coordonées de n'importe quel point s'ecrit directement [x,y] sans specifier le type
0