Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recuperer plusieurs valeurs en retour de fonction ?

10 réponses
Avatar
yomgui
Salut,

j'essaye de recuperer un int et un float.

en c++ je ferais:

int MaFonction ( float & aoArg )
ou
int MaFonction ( float * aoArg )

en java:

public int MaFonction ( float aoArg )

mais aoArg n'est pas modifié

public int MaFonction ( Float aoArg )

pourrait marcher, mais Float ne donne pas
de moyen de modifier aoArg dans le corps de MaFonction.

alors ? comment dois-je faire ?

merci.

yomgui

10 réponses

Avatar
yomgui
Nicolas Delsaux wrote:

public int MaFonction ( Float aoArg )

pourrait marcher, mais Float ne donne pas
de moyen de modifier aoArg dans le corps de MaFonction.

alors ? comment dois-je faire ?


Est-ce que tu ne pourrais pas renvoyer un objet, d'une classe que tu
crées, et dont les champs seraient un int et un float ?
Et comme je parie que ta fonction est fortement corrélée avec ces deux
champs, elle se retrouverait dans ta classe, et tond esign serait
nettement plus clair.


je peux bien sur faire un bidouillage, mais je pensais
que d'une maniere ou d'une autre java adressait ce probleme.
j'avais meme un instant imaginé que les classes d'emballages etaient
la pour ca.

ah la la, j'aime bien java, mais plus je m'en sers, plus je trouve
qu'il manque des trucs.

merci

yomgui


Avatar
captainpaf
je peux bien sur faire un bidouillage, mais je pensais
que d'une maniere ou d'une autre java adressait ce probleme.


bidouilles ?? Je ne vois pas en quoi déclarer 2 variables privées pour les
modifier au sein de ta class relève de la bidouille. D'ailleur, il y a plein
de manière de réaliser ce que tu veux faire. Par exemple, tu peux aussi
passer en paramètre de ta fonction un objet de cette class

public class QuiDevraEtreBienNommee
{
private float tonFloat;
private int tonInt;

public void setInt(int newInt)
{
tonInt = newInt;
}
public void setFloat(float newFloat)
{
tonFloat = newFloat;
}
}

j'avais meme un instant imaginé que les classes d'emballages etaient
la pour ca.

ah la la, j'aime bien java, mais plus je m'en sers, plus je trouve
qu'il manque des trucs.


ou alors ta façon de programmer n'est pas encore compatible avec java. C'est
sûr qu'un débutant en c++ va mieux s'en sortir puisqu'il va mélanger son
code avec du c. ça marchera peut être mais cela sera complètement
immatenable.
Je ne dis pas que java est parfait, mais avance un peu dans le langage avant
de faire des critiques atives et injustifiées.


merci

yomgui


Avatar
Eric Delcamp
A mon humble avis, tu as du rater qqchose dans Java.
Ce n'est pas du C. N'importe quel debutant en Java sait que tu ne peux pas
modifier la variable, c'est l'un des objectifs de Java.
L'encapsulation dans une classe avec un objet est LA methode a utiliser. Je
pense que tu cherche beaucoup trop a adapter un programme C ou C++ en Java.
Ce ne sont pas des choses a faire. Il ne manque rien a Java en tant que
language (ou si peu ;), c'est simplement une philosophie differente.

"yomgui" a écrit dans le message de
news:
Nicolas Delsaux wrote:

public int MaFonction ( Float aoArg )

pourrait marcher, mais Float ne donne pas
de moyen de modifier aoArg dans le corps de MaFonction.

alors ? comment dois-je faire ?


Est-ce que tu ne pourrais pas renvoyer un objet, d'une classe que tu
crées, et dont les champs seraient un int et un float ?
Et comme je parie que ta fonction est fortement corrélée avec ces deux
champs, elle se retrouverait dans ta classe, et tond esign serait
nettement plus clair.


je peux bien sur faire un bidouillage, mais je pensais
que d'une maniere ou d'une autre java adressait ce probleme.
j'avais meme un instant imaginé que les classes d'emballages etaient
la pour ca.

ah la la, j'aime bien java, mais plus je m'en sers, plus je trouve
qu'il manque des trucs.

merci

yomgui




Avatar
mouly
yomgui écrivait news::

Salut,

j'essaye de recuperer un int et un float.
en c++ je ferais:
int MaFonction ( float & aoArg )
ou
int MaFonction ( float * aoArg )

en java:
public int MaFonction ( float aoArg )
mais aoArg n'est pas modifié
public int MaFonction ( Float aoArg )

pourrait marcher, mais Float ne donne pas
de moyen de modifier aoArg dans le corps de MaFonction.


pour les details techniques :

- le passage d'argument en java se fait par référence pour les Objets et
par valeur pour les types primitifs (int etc.)
- On ne peut pas (et on ne veut pas) 'jouer' avec les pointeurs en java
- une fonction ne retourne qu'une seule valeur ou rien

donc il faut que tu encapsules les données dans un objets
ou tu fais appel a deux fonctions

le conseil de Nicolas est tres pertinent: ta fonction pourrait etre une
methode de la classe qui encapsule tes données.

--
mouly
mouly2 at yahoo dot com

Avatar
Nicolas Delsaux
Le 10.07 2003, yomgui s'est levé(e) et s'est dit "tiens,
je vais écrire aux mecs de fr.comp.lang.java"

mais , sauf erreur ca m'oblige a creer un fichier suplementaire
QuiDevraEtreBienNommee.java

moi tout ce que je voulais, c'etait retourner deux valeurs,
la, ca alourdit quand meme un peu.


L'hypothèse de base de Java, c'est que tes deux variables, si tu veux les
retourner ensemble, sont fortement corrélées. Il est donc logique de
supposer que ces deux variables devraient se trouver dans la même classe.
Du coup, l'écriture du fichier n'est plus aussi lourde que ce que tu
penses, puisqu'il ne s'agit de rien d'autre que de faire du code
maintenable.

mais je vais m'y faire.


Sûrement.

yomgui




--
Nicolas Delsaux
Postulat de Murphy :
La Loi de Murphy s'applique à elle-même ; elle ne se vérifie que lorsqu'on
ne s'y attend pas et inversement.

Avatar
Frédéric Minne
yomgui wrote:
Salut,

j'essaye de recuperer un int et un float.

en c++ je ferais:

int MaFonction ( float & aoArg )
ou
int MaFonction ( float * aoArg )

en java:

public int MaFonction ( float aoArg )

mais aoArg n'est pas modifié

public int MaFonction ( Float aoArg )

pourrait marcher, mais Float ne donne pas
de moyen de modifier aoArg dans le corps de MaFonction.

alors ? comment dois-je faire ?

merci.

yomgui


Hello,

Ce problème, en réalité il s'agit d'un choix de conception pour le
langage Java, vient du fait que Java passe les arguments aux méthodes
par valeur (même les références sont passées par valeur, c'est pour cela
que ta méthode ne fonctionne pas non plus avec un objet Float).

Il existe quand même une manière, très sale, de faire ce que tu désires
: mettre ton float dans un tableau de float de taille 1 :

<code>
public int MaFonction ( float[] arg )
{
int i = ...;
float temp = arg[0];
... // faire des trucs avec temp et i
arg[0] = temp;
return i;
}

public static void main(String[] arg)
{
...
float myfloat = ...;
float[] arg = {myfloat};
int myint = MaFonction(arg);
myfloat = arg[0];
...
}
</code>

Mais je ne pense pas que ce soit la meilleure chose à faire et pour
plusieurs raisons :
- ce n'est pas très propre;
- ce n'est pas très orienté objet;
- ce n'est pas vraiment dans l'esprit de Java;
- et en plus toute les défenseurs de l'orienté objet pur et dur de ce NG
vont me tomber dessus pour t'avoir donné cette solution.

Je te conseille plutôt de revoir le design de ton application et soit
d'utiliser des variables globales, soit de créer une classe qui te
premettra de régler le problème.

J'espère que ça pourra t'aider,

--
------------ Frederic Minne (FSA3DS/IN)

(remove spam before replying)
(remove spam before replying)
jabberID :
ICQ#: 51502355

---------------------------------------

Avatar
vclassine
yomgui wrote in message news:...

ah la la, j'aime bien java, mais plus je m'en sers, plus je trouve
qu'il manque des trucs.
A mon avis c'est un soucis de conception, quand j'ai débuté en java

j'ai pesté contre cette contraintes, mais depuis que mon cerveau s'y
ai adpté je programme curieusement mieux... ;-)

C'est qu'un mauvais moment à passer, offres toi un bon bouquin de
POO/COO (le pavé de Bertrand Meyer, par exemple) et ça ira mieux...

Avatar
Francis JUGE-BOIRARD
yomgui wrote:
public Object[] maMethod ([param ...]);

Il ne reste plus qu'a interprétait le retour.

C'est simple, ça n'alourdit rien est c'est clair.
Avatar
vinc.s
Tu n'as qu'à choisir un langage de programmation sérieux.
Avatar
Nicolas Delsaux
Le 11.07 2003, Francis JUGE-BOIRARD
s'est levé(e) et s'est dit "tiens, je vais écrire aux mecs de
fr.comp.lang.java"

yomgui wrote:
public Object[] maMethod ([param ...]);

Il ne reste plus qu'a interprétait le retour.

C'est simple, ça n'alourdit rien est c'est clair.

C'est loin d'être simple et clair, comme tu le dis, car rien ne te permet,

lorsque tu reçois ce tableqau, de savoir que le premier paramètre est un
int et le second un Float.
Si au moins tu renvoyais un tableau de Number, je pourrais à la rigueur
l'accepter. Mais là, c'est au-delà de mes moyens, et je trouve cette
solution relativement sale.




--
Nicolas Delsaux
JFS > Imaginer que des ingénieurs puissent reprendre le contrôle de quoi
que ce soit... Pas de doute, on est bien sur un forum de SF !
in fras en perte de contrôle