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 13/06/2009, à 13:50

baobab95

java

bonjour,
voila dans mon exam de java il y avait cette question, mais je n'ai pas compris la réponse !!

Class D {
public int x;
public D() { x = 3;}
public D (int a) {this(); x=x+a;}
public D (int a, int b){ this(b); x=x-a;}

Qu'afficheras le code suivant ?

D a = nex D(5,6);
System.out.println(a.x);

la réponse est 4..Pourquoi ?


**** --> http://julienze.free.fr <-- ****
Le futur site officiel des associations ! (enfin j'espère :p)
Ubuntu : le pingouin qui passe la pomme par la fenêtre !

Hors ligne

#2 Le 13/06/2009, à 14:11

baobab95

Re : java

sad need
(désolé si je suis insistant mais je révise pour le rattrapge...)


**** --> http://julienze.free.fr <-- ****
Le futur site officiel des associations ! (enfin j'espère :p)
Ubuntu : le pingouin qui passe la pomme par la fenêtre !

Hors ligne

#3 Le 13/06/2009, à 14:25

antywey001

Re : java

D a = new D(5,6);
On voit que le constructeur avec deux arguments fait d'abords appel au constructeur avec un argument ( donc ici, this(6)).  la valeur de x vaudrat donc 9.  Après, il enlève 5 de 9, donc ça affiche 4.

Bonne chance pour ton exam!

#4 Le 13/06/2009, à 14:27

baobab95

Re : java

ok compris !
c'est sur les this() que j'étais incertain...Merci beaucoup smile big_smile


**** --> http://julienze.free.fr <-- ****
Le futur site officiel des associations ! (enfin j'espère :p)
Ubuntu : le pingouin qui passe la pomme par la fenêtre !

Hors ligne

#5 Le 13/06/2009, à 14:52

baobab95

Re : java

je vais en profiter car j'ai encore des doutes au sujet d'une chose !
la compléxité !! (c'est ce qui me fais me planter à chaque fois !)
voila l'énoncé :
on considère la boucle suivante (n > 0) :
for (int i = 0 ; i < n; i+=1) for (int j = 1; j < n; j=2*j) f(i);

1) Le nombre d'apels de f est un O(n)
2) Le nombre d'apels de f est un O(n²)
3) Le nombre d'apels de f est un O(log(n))
4) Le nombre d'apels de f est un O(nlog(n))

au passage si quelqu'un à un bon cours sur la compléxité je prends car je suis vraiment nul !
pour moi la bonne réponse été la 2 (car il y a deux boucle imbriquée) mais apparament c'est la 4...


**** --> http://julienze.free.fr <-- ****
Le futur site officiel des associations ! (enfin j'espère :p)
Ubuntu : le pingouin qui passe la pomme par la fenêtre !

Hors ligne

#7 Le 18/06/2009, à 17:06

reeth

Re : java

baobab95 a écrit :

pour moi la bonne réponse été la 2 (car il y a deux boucle imbriquée) mais apparament c'est la 4...

De même. Si quelqu'un a une explication à ce sujet...

Hors ligne

#8 Le 18/06/2009, à 17:14

TatrefThekiller

Re : java

Tu fais n fois la boucle i et log(n) fois la boucle j (à cause du j *= 2).

Hors ligne

#9 Le 18/06/2009, à 17:20

Khyl

Re : java

C'est effectivement la 4
for (int i = 0 ; i < n; i+=1) for (int j = 1; j < n; j=2*j) f(i);

La première boucle va de 1 à n en de 1 à 1 donc ça fait une complexité de n
la seconde boucle va de 1 à n mais avec un pas de 2 x j qui est le compteur de boucle. Du coup cette deuxième boucle a une complexité de log(n) puisqu'à chaque itération, on avance de 2 fois le pas d'itération

Du coup la complexité globale est O (n log(n))

EDIT : Grillé par TatrefThekiller wink il a dit en quelques mots ce que j'ai dis blablatant

Dernière modification par Khyl (Le 18/06/2009, à 17:21)

Hors ligne