Un point comme argument d'une fonction java

Fermé
sabrinaSbina Messages postés 16 Date d'inscription lundi 13 août 2012 Statut Membre Dernière intervention 16 août 2012 - 13 août 2012 à 03:02
sabrinaSbina Messages postés 16 Date d'inscription lundi 13 août 2012 Statut Membre Dernière intervention 16 août 2012 - 15 août 2012 à 19:50
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 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
Modifié par KX le 13/08/2012 à 08:22
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 lundi 13 août 2012 Statut Membre Dernière intervention 16 août 2012
14 août 2012 à 02:28
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 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
14 août 2012 à 13:59
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 lundi 13 août 2012 Statut Membre Dernière intervention 16 août 2012
15 août 2012 à 14:42
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 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
15 août 2012 à 15:05
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 lundi 13 août 2012 Statut Membre Dernière intervention 16 août 2012
15 août 2012 à 15:13
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