Que fais ce programme java?

Fermé
freemasons - 10 janv. 2008 à 13:09
 freemasons - 17 janv. 2008 à 15:35
salut!!!
est ce que quelqu'un peut me dire ce que fais ce programmme, je ne le comprends absolument pas!
merci




Soient les trois classes A, B et C:

public class A{
booleanf;
public A (int v1) {f=m(v1);}
private boolean m(int v1) {System.out.println("A "+ v1);
if (v1<0) return true; else return false;}
protected int m(int v1; int v2) {System.out.printl ("A "+ v1 + " " "+ v2);
if (f) return v1; else return v2; }
}
public classe B extends A{
public B(int v1) {super(v1);}
double m(double v1, int v2) {System.out.println("B "+ v1 + " " + v2);
return v1/m(v2, v2+1);}
}

public class C extends A{
public C(int v1, int v2) {super(v1+v2);}
boolean m(int v1, double v2) {System.out.println("C" +v1 " " + v2);
if (v1>v2)return true; else return false;}
}




Qu'affiche le programme suivant avec les valeurs entières v1, v2 initialisées à partir de votre date de naissance: v1=mois v2= quantième du mois
public static void main (String[] args {
int v1, v2;
B b = new B(v2);
C c= new C (v1,v2);
c.m(v2, b.m(1.0 , v1));
b.m(c.m(v1, v2),v1);
}
A voir également:

7 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
10 janv. 2008 à 13:17
Je reposte plus clairement ton programme pour y voir plus clair. Merci de faire la même chose la prochaine fois.

public class A{
   boolean f;
   public A (int v1) {
      f=m(v1);
   }
   private boolean m(int v1) {
        System.out.println("A "+ v1);
        if (v1<0) 
           return true;
        else 
          return false;
   }
   protected int m(int v1; int v2) {
        System.out.printl ("A "+ v1 + " " "+ v2);
        if (f) 
          return v1;
         else return v2;
   }
}

public classe B extends A{
   public B(int v1) {
       super(v1);
   }
   double m(double v1, int v2) {
       System.out.println("B "+ v1 + " " + v2);
       return v1/m(v2, v2+1);
   }
}

public class C extends A{
    public C(int v1, int v2) {
         super(v1+v2);
    }
    boolean m(int v1, double v2) {
         System.out.println("C" +v1 " " + v2);
         if (v1>v2)
             return true; 
        else
             return false;
    }
} 


Et le main :

public static void main (String[] args {
    int v1 = 10, v2 = 06;
    B b = new B(v2);
    C c= new C (v1,v2);
    c.m(v2, b.m(1.0 , v1));
    b.m(c.m(v1, v2),v1);
}

0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
10 janv. 2008 à 13:27
Je ne sais pas ce qu'elle fait exactement mais en tout cas ton prog ne risque pas de fonctionner c'est bourré d'erreur de syntaxe.
Aussi, il y a une boucle infinie dans ton programme :
double m(double v1, int v2) {
		   System.out.println("B "+ v1 + " " + v2);
		   return v1/m(v2, v2+1);
	   }


Cette fonction se rappelle elle-même sans condition d'arrêt / retour, donc ca risque de boucler à l'infinie, du moins au moins jusqu'à ce qu'une exception sur la division soit levée...
0
pourtant c'est comme cela que nous l'a donné le prof. c'est un examen de partiel que j'ai eu l'an dernier, et je ne comprends toujours pas ce programme
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
10 janv. 2008 à 13:39
Fautes de syntaxes :
public classe B extends A   // Pas de 'e' à class
int v1; int v2)  // ';' à remplacer par ','
System.out.println("C" +v1 " " + v2);   // manque un '+' juste apres v1


Mise à part ca, je pense que ton prof n'as pas du relire correctement le programme ni même tenter de l'éxécuter pour la raison suivante :
Ta classe B hérite de la classe A. Dans la classe A tu as une méthode nommée 'm', de même dans la classe B. Généralement, le fait de redéfinir une méthode (même nom, même retour, mêmes paramètres) dans une classe fille permet de changer son comportement par rapport à la classe mère (ou une autre classe fille).
Or le problème avec ton programme c'est que tu as bien la fonction 'm' reféfinie dans la classe fille B, mais pas avec les mêmes paramètres ni le même retour, ce qui a pour conséquence de ne pas pouvoir compiler le programme puisqu'il y a ambiguité entre les deux fonctions.
0
hey tu sais tu devrais devenir professeur!!!!! non sérieux t'expliques bien!!!!!!!!! mon prof il donne des polycopiés, on fait un ptit exo en cours et hop démerde toi!!!!! bon je sais pas si je dois lui dire que son programme comporte quelques erreurs....il va me filer une baffe.....lol
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
10 janv. 2008 à 13:45
J'ai fais quelques modifications pour pouvoir faire tourner ton programme (renommer certaines méthodes, fautes de syntaxes corrigées, etc.). Voici le code :
public class Test {
	public class A{
	   boolean f;
	   public A (int v1) {
		  f=m(v1);
	   }
	   private boolean m(int v1) {
			System.out.println("A "+ v1);
			if (v1<0) 
			   return true;
			else 
			  return false;
	   }
	   protected int m(int v1, int v2) {
			System.out.println ("A "+ v1 + " " + v2);
			if (f) 
			  return v1;
			 else return v2;
	   }
	}

	public class B extends A{
	   public B(int v1) {
		   super(v1);
	   }
	   protected double mm(double v1, int v2) {
		   System.out.println("B "+ v1 + " " + v2);
		   return v1/m(v2, v2+1);
	   }
	}

	public class C extends A{
		public C(int v1, int v2) {
			 super(v1+v2);
		}
		protected boolean mmm(int v1, double v2) {
			 System.out.println("C" +v1 +" " + v2);
			 if (v1>v2)
				 return true; 
			else
				 return false;
		}
	} 
	public void myMain ( ){
		int v1 = 10, v2 = 6;
		B b = new B(v2);
		C c= new C (v1,v2);
		c.mmm(v2, b.mm(1.0 , v1));
		b.m(c.m(v1, v2),v1);
	}
	public static void main (String[] args ) {
		Test myTest = new Test();
		myTest.myMain();
	}
	
}


J'ai fais tourner et voici ce que ca affiche :
A 6
A 16
B 1.0 10
A 10 11
C6 0.09090909090909091
A 10 6
A 6 10


Quans à savoir ce qu'il fait... aucune idée ^^
0
salut!
mon eclipse remarche c'est trop cool!!! par contre j'ai réussi a le faire marcher, mais il ne m'affiche pas si la variable v1 est supérieur à v2 et dans ce cas si le programme devrait afficher true!


System.out.println("C" +v1 +" " + v2);
if (v1>v2)
return true;
else
return false;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ah ok c'est cool, mais t'as fais ça aevc quelle date de naissance?
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
10 janv. 2008 à 13:48
Faut lire :)
int v1 = 10, v2 = 6;

Le 6 octobre.
0
ah ok :-)....merci :-)
0