IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Appel d'une fonction d'une autre classe par la classe qui contient la procédure main


Sujet :

avec Java

  1. #1
    Candidat au Club
    Femme Profil pro
    webmaster-développeur
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : webmaster-développeur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Appel d'une fonction d'une autre classe par la classe qui contient la procédure main
    Bonjour,

    J'ai un programme à faire pour un cours débutant java sur le sudoku...

    On doit faire 3 classes Case.java, Grille.java et Test.java J'ai pu faire les fonctions des différentes classes.
    J'ai mis dans public class Test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private static void main(String[] args) {
    	    	messageaccueil();
     
    			switch (nombre)
    				{
    				case 1 : chargerJeu();
    						break;
    				case 2 : jouerSudoku();
    						  break;
    				 case 3 : quitter();
    						  break;
    				 }
    	     }
    Mais par exemple a fonction jouerSudoku appelle des fonctions se trouvant dans Grille.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
                   private static void  jouerSudoku() {
     
    	    	System.out.println("Veuillez choisir une ligne: ");
    	    	int lig = obtenirUnNombre(0,9);
    	    	System.out.println("Veuillez choisir une colonne: ");
    	    	int col = obtenirUnNombre(0,9);
    	    	System.out.println("Veuillez choisir une valeur: ");
    	    	int val = obtenirUnNombre(0,9);
    	    	boolean okLigne= Grille.estSurLigne(val, lig);
    	    	boolean okCol=Grille.estSurColonne(val,col);
    	    	boolean okBloc=Grille.estDansLeBloc(val,lig,col);
     
    	    	if(!okLigne || !okCol || !okBloc ){
    	    		...
    	    	}
    Et j'ai le message que je dois changer la fonction qui est dans Grille par par une fonction static.

    Voici la fonction dans la class Grille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public boolean estSurLigne(int _valeur, int _ligne) { //donc ajouter public static boolean estSurLigne(int _valeur, int _ligne)
    		boolean verifierLigne = false;
    		int j=_ligne;
    		for (int i=0;i<9;i++){
    			if(tab1[i][j] == _valeur) {
    				verifierLigne=true;
    			}
    		}
     
    		return verifierLigne;
     
    	}
    Voici le début de la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Grille {
    	 //attributs
    	 int  tab1 [][] ;
    	//constructeur
    	public Grille(ArrayList<Integer>al){etc..
    Pourriez-vous m'aider?

    Merci beaucoup

    Domi

  2. #2
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    A partir du moment où tu écris : "Grille.estSurLigne()", ça veut dire que la méthode estSurLigne est statique.
    Si tu ne veux pas que la méthode soit statique, il faut déclarer un objet Grille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Grille grille = new Grille();
    grille.estsurLigne()
    Donc je ne vois pas le problème avec l'erreur remonté. Tu demande à utiliser une méthode non statique mais tu l'appelles comme si elle l'était.
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  3. #3
    Candidat au Club
    Femme Profil pro
    webmaster-développeur
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : webmaster-développeur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut new type
    Citation Envoyé par nchal Voir le message
    A partir du moment où tu écris : "Grille.estSurLigne()", ça veut dire que la méthode estSurLigne est statique.
    Si tu ne veux pas que la méthode soit statique, il faut déclarer un objet Grille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Grille grille = new Grille();
    grille.estsurLigne()
    Donc je ne vois pas le problème avec l'erreur remonté. Tu demande à utiliser une méthode non statique mais tu l'appelles comme si elle l'était.
    Merci pour ta réponse.

    J'ai pourtant créer une grille tableau du type grille dans une autre fonction de la classe Test.java qui est appelée par jouerSudoku pour convertir un fichier texte en arraylist et ensuite en tableau

    private static Grille LireFichier (BufferedReader fluxEntree)//on retourne une liste

    Grille tableau = new Grille(liste);
    return tableau;//la liste est devenue un tableau grille
    Donc je pourrais mettre

    boolean okLigne= tableau.estSurLigne(val, lig); puisque c'est de ce tableau là qu'il s'agit :

    Mais Eclipse dit qu'il faut déclarer le tableau localement...pourtant je l'ai déclaré dans une autre fonction mais cette fonction estsurLigne n'a pas l'air de le savoir.

  4. #4
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    C'est le problème de scope, dès que tu sors d'une méthode, toutes les variables locales "disparaissent".
    Mais ce sont des notions de bases, je te conseille vraiment de suivre des cours en ligne, sinon, tu vas te poser un tas de questions et tu vas plutôt faire n'importe quoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void method1() {
    int number = 1;
    }
    public void method2()
    number = number + 1 // impossible, number n'est pas visible dans method2 car déclarer dans method1
    }
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  5. #5
    Candidat au Club
    Femme Profil pro
    webmaster-développeur
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : webmaster-développeur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par nchal Voir le message
    C'est le problème de scope, dès que tu sors d'une méthode, toutes les variables locales "disparaissent".
    Mais ce sont des notions de bases, je te conseille vraiment de suivre des cours en ligne, sinon, tu vas te poser un tas de questions et tu vas plutôt faire n'importe quoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void method1() {
    int number = 1;
    }
    public void method2()
    number = number + 1 // impossible, number n'est pas visible dans method2 car déclarer dans method1
    }
    Merci je l'avais fait après ton message précédent je m'en suis rendu compte et je suis des cours en ligne puisque c'est pour un exercice à faire.
    Merci de la leçon, je pense que je vais retenir...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Appel d'une fonction dans une iframe sur un autre domaine
    Par morikann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/06/2007, 18h46
  3. Réponses: 8
    Dernier message: 10/01/2007, 21h10
  4. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo