Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/05/2017, à 13:53

plouf1221

Comment appeler une fonction en java ? [RESOLU]

Bonjour,

Je suis un débutant dans la langage java et je me débrouille assez en C, la transition est vraiment délicate.
J'ai fait une petite fonction qui s'appelle recherche. Elle prends en paramètre un tableau d'entier et un entier qui est la valeur recherchée.
Si la valeur est dans le tableau elle retourne vrai sinon elle retourne faux.
Je pense avoir bien codé la fonction mais par contre dans mon main de test je ne sais pas comment l'appeler.

la fonction recherche:

public class Tableau
{	
	public boolean recherche (int tableau[], int valeur_recherche)
	{
		for (int i = 0; i < tableau.length; i++)
		{
			if (tableau[i] == valeur_recherche)
				return true;
		}
		return false; 
	}
}

Le main

public class test
{
	public static void main(String[] args)
	{
		int tableau[] = {1,2,3};
               /* appel de la fonction recherche sur le tableau */
	}
       
}

Je veux juste appeler ma fonction recherche sur le tableau.
J'ai essayé :
- recherche (tableau, 10);
- tableau.recherche (tableau, 10);

Merci pour votre aide, la question est simple mais j'y arrive pas.

Dernière modification par plouf1221 (Le 15/05/2017, à 19:50)

Hors ligne

#2 Le 15/05/2017, à 17:05

Bruno Letat

Re : Comment appeler une fonction en java ? [RESOLU]

Bonjour,

Je ne sais pas pourquoi tu prends deux classes pour tester ta fonction, utilise ta classe Tableau pour implémenter les deux méthodes, c'est plus simple pour les tests.
Ensuite, comme le "main" est en static, il faut mettre la méthode appelée en static aussi, sinon tu auras une erreur du type "non-static method recheche..."
voici un exemple qui devrait fonctionner.

public class Tableau {
        public static boolean recherche (int tableau[], int valeur_recherche)  {
                for (int i = 0; i < tableau.length; i++) {
                        if (tableau[i] == valeur_recherche)
                                return true;
                }
                return false;
        }

        public static void main(String[] args) {
                int tableau[] = {1,2,3};
               /* appel de la fonction recherche sur le tableau */
                if (recherche(tableau,4)) { // 4 est pour l'exemple ici, pour tester si ça écrit "pas ok"
                        System.out.println("ok");
                }
                else {
                        System.out.println("pas ok");
        }
}

Regarde si ça te convient et si ça fonctionne.
A bientôt,

Bruno

Dernière modification par Bruno Letat (Le 15/05/2017, à 17:09)

Hors ligne

#3 Le 15/05/2017, à 18:12

soshy

Re : Comment appeler une fonction en java ? [RESOLU]

1- c'est la premiere fois que je vois int tableau[] , "on" a plutot tendance a l'ecrire int[] tableau, sous entendu un tableau d'int nome "tableau". Apres c'est possible que ce soit plus une convention Java qu'autre chose.
2- Une classe separee c'est une bonne pratique a garder. C'est pas obligatoire evidemment, mais c'est comme ca qu'on fait les choses bien (et avec junit)

Ta methode n'est pas statique, ca veut dire qu'elle ne peut etre appeller que si un objet Tableau a ete instancie (avoir new Tableau() quelque part).
Donc la reponse a ta question c'est ca:

public class test
{
	public static void main(String[] args)
	{
		int tableau[] = {1,2,3};
               /* appel de la fonction recherche sur le tableau */
               Tableau tab = new Tableau(); // on instancie un objet Tableau
               tab.recherche(tableau, 3);     // on appelle la fonction recherche de l'objet tableau qu'on vient de creer.
	}
}

Dernière modification par soshy (Le 15/05/2017, à 18:16)

Hors ligne

#4 Le 15/05/2017, à 19:37

plouf1221

Re : Comment appeler une fonction en java ? [RESOLU]

Merci pour vos réponses Bruno et Soshy.
J'ai testé les deux méthodes c'est à dire la déclaration en statique de ma fonction recherche et l'instanciation via l'opérateur new.
En déclarant en static ma méthode cela ne fonctionne pas.
Avec l'instanciation aucun souci. Par contre je ne comprends pas vraiment ce que je fais.
Cette ligne m'intrigue : Tableau tab = new Tableau();
Cela veux dire que j'instancie un objet de ma classe Tableau. Mais y a "rien" dans ma classe, c'est à dire aucun attribut juste une méthode.
Donc j'ai un peu de mal à comprendre ce que j'instancie exactement, "du vide" ?

Ci dessous le code avec le mot clé static qui ne fonctionne pas.

La fonction recherche

public class Tableau
{	
	public static boolean recherche (int tableau[], int valeur_recherche)
	{
		for (int i = 0; i < tableau.length; i++)
		{
			if (tableau[i] == valeur_recherche)
				return true;
		}
		return false; 
	}
}

Le main

public class test
{
	public static void main(String[] args)
	{
		int tableau[] = {1,2,3};
		
		if (recherche (tableau,4))
			System.out.println("ok");
		else
			System.out.println("KO");
	}
}

PS : Bruno dans ton code vous avez oublié un crochet fermant au niveau du else

Dernière modification par plouf1221 (Le 15/05/2017, à 19:38)

Hors ligne

#5 Le 15/05/2017, à 19:43

plouf1221

Re : Comment appeler une fonction en java ? [RESOLU]

Désolé Bruno ton code fonctionne parfaitement il suffit de mettre tout dans une seul classe celle du main.
J'ai pris l'habitude de toujours séparé les méthodes du main.
Sans rancune wink
Du coup si je veux garder les méthodes indépendantes du main je suis obligé de prendre la méthode de Soshy.

Dernière modification par plouf1221 (Le 15/05/2017, à 19:50)

Hors ligne

#6 Le 16/05/2017, à 07:10

grigouille

Re : Comment appeler une fonction en java ? [RESOLU]

plouf1221 a écrit :
public class test
{
	public static void main(String[] args)
	{
		int tableau[] = {1,2,3};
		
		if (Tableau.recherche (tableau,4))
			System.out.println("ok");
		else
			System.out.println("KO");
	}
}

Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#7 Le 16/05/2017, à 08:56

Bruno Letat

Re : Comment appeler une fonction en java ? [RESOLU]

@Soshy : faire une classe séparée pour tester avec JUnit quand on est habitué à programmer en Java, c'est une bonne pratique à appliquer mais quand on veut simplement tester une méthode qui fait 3 lignes et que l'on débute dans un langage, j'ai tendance à recommander de commencer par des choses très simples (en restant assez propre) et ensuite de complexifier en appliquant les bonnes pratiques.

@Plouf1221 : pas de souci (à la parenthèse fermante près que j'avais oubliée). Si tu te sens à l'aise avec deux classes pour tester, Soshy a raison, c'est une meilleure méthode et si tu as appris comme ça, garde cette bonne habitude.

A bientôt,
Bruno

Hors ligne

#8 Le 16/05/2017, à 09:19

soshy

Re : Comment appeler une fonction en java ? [RESOLU]

Tu peux aussi appeler la methode statique quand c'est deux fichiers differents, mais a ce moment la, il faut preciser sur quelle classe se trouve la methode demandee (eclipse fait les imports plus ou moins tout seul).

public class test
{
	public static void main(String[] args)
	{
		int tableau[] = {1,2,3};
               /* appel de la fonction recherche sur le tableau */
               Tableau.recherche(tableau, 3); // on appelle la methode statique recherche de la classe Tableau
	}
}

Le static, en gros c'est quelque chose qui est relatif a une classe. Si tu precises rien, ce n'est donc pas static, et c'est relatif a une instance d'une classe. C'est donc pour ca qu'avec la methode static il suffit de Tableau.recherche(...) alors que sans le static il faut d'abord creer un objet sur lequel on pourra appeler la methode.

j'ai un peu de mal à comprendre ce que j'instancie exactement, "du vide" ?

C'est un peu ca. Essaye de voir une classe comme un moule, et l'instanciation l'objet moulé. Du coup, la tu as une sorte de kinder supripse sans la surprise :-)
Avec une methode static on s'interesse au moule en gros. On peu obtenir ses dimentions etc. Quand c'est pas statique, c'est relatif a un kinder (il faut en mouler un). On peut aussi obtenir ses dimensions, mais on a un bonus, on connait la suprise qu'il contient. C'est pas forcement utile de savoir ce qu'il contient si on veut ses dimensions, en revanche, c'est indispensable si on veut son poids par exemple.

J'espere que mon analogie kinder surprise est claire big_smile

Dernière modification par soshy (Le 16/05/2017, à 09:58)

Hors ligne