J'essaie de renvoyer 2 valeurs d'une méthode Java mais j'obtiens ces erreurs. Voici mon code:
// Method code
public static int something(){
int number1 = 1;
int number2 = 2;
return number1, number2;
}
// Main method code
public static void main(String[] args) {
something();
System.out.println(number1 + number2);
}
Erreur:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - missing return statement
at assignment.Main.something(Main.java:86)
at assignment.Main.main(Main.java:53)
Résultat Java: 1
java
function
return-value
javaLearner.java
la source
la source
Réponses:
Au lieu de renvoyer un tableau contenant les deux valeurs ou d'utiliser une
Pair
classe générique , envisagez de créer une classe qui représente le résultat que vous souhaitez renvoyer et renvoyez une instance de cette classe. Donnez à la classe un nom significatif. Les avantages de cette approche par rapport à l'utilisation d'un tableau sont la sécurité de type et rendra votre programme beaucoup plus facile à comprendre.Remarque: Une
Pair
classe générique , comme proposé dans certaines des autres réponses ici, vous donne également la sécurité de type, mais ne transmet pas ce que le résultat représente.Exemple (qui n'utilise pas de noms vraiment significatifs):
la source
Java ne prend pas en charge les retours à valeurs multiples. Renvoie un tableau de valeurs.
la source
Vous pouvez implémenter un générique
Pair
si vous êtes sûr que vous n'avez qu'à renvoyer deux valeurs:puis demandez à la méthode de renvoyer que
Pair
:la source
Vous ne pouvez renvoyer qu'une seule valeur en Java, donc le moyen le plus simple est comme ceci:
Voici une version mise à jour de votre code:
la source
Voici la solution vraiment simple et courte avec SimpleEntry:
Utilise uniquement les fonctions intégrées de Java et il est livré avec l'avantage de la sécurité de type.
la source
vous devez utiliser des collections pour renvoyer plus d'une valeur de retour
dans votre cas, vous écrivez votre code comme
la source
la source
Utilisez un objet de type Pair / Tuple, vous n'avez même pas besoin d'en créer un si vous dépendez d'Apache commons-lang. Utilisez simplement la classe Pair .
la source
Je suis curieux de savoir pourquoi personne n'a proposé la solution de rappel la plus élégante. Ainsi, au lieu d'utiliser un type de retour, vous utilisez un gestionnaire passé dans la méthode en tant qu'argument. L'exemple ci-dessous présente les deux approches contrastées. Je sais lequel des deux est le plus élégant pour moi. :-)
la source
Vous n'avez pas besoin de créer votre propre classe pour renvoyer deux valeurs différentes. Utilisez simplement un HashMap comme celui-ci:
Vous bénéficiez même de la sécurité de type.
la source
À mon avis, le mieux est de créer une nouvelle classe dont le constructeur est la fonction dont vous avez besoin, par exemple:
Ensuite, utilisez simplement le constructeur comme vous utiliseriez la fonction:
et vous pouvez utiliser pR.sth1, pR.sth2 comme "2 résultats de la fonction"
la source
Vous pouvez également envoyer des objets mutables en tant que paramètres, si vous utilisez des méthodes pour les modifier, ils seront modifiés lorsque vous reviendrez de la fonction. Cela ne fonctionnera pas sur des choses comme Float, car il est immuable.
Le résultat est: Rutger
la source
Renvoyer un tableau d'objets
la source
Premièrement, il serait préférable que Java ait des tuples pour renvoyer plusieurs valeurs.
Deuxièmement, codez la
Pair
classe la plus simple possible ou utilisez un tableau.Mais, si vous avez besoin de retourner une paire, pensez à ce concept , il représente ( en commençant par ses noms de champs, puis le nom de la classe) - et si elle joue un rôle plus important que vous pensiez, et si cela aiderait votre conception globale d'avoir un abstraction explicite pour cela. Peut - être un
code hint
...S'il vous plaît Note: Je ne suis pas dogmatiquement en disant qu'il va aider, mais juste pour regarder, pour voir si elle fait ... ou si elle ne fonctionne pas.
la source
et voici comment vous le faites dans JS:
return { objA, valueB }
. Je sais que c'est hors sujet, mais je ne peux pas m'abstenir de laisser ce commentaire après avoir vu comment une toute nouvelle classe doit être implémentée en Java. JavaScript - arrêtez de perdre votre vie et commencez à créer des scripts!la source