CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Java : j'ai le droit de mettre une condition aussi grande ?

DébutPage précedente
1
Page suivantePage suivante
Mr_Wright Mr_Wright
MP
Niveau 10
20 septembre 2018 à 11:04:11

Bonjour, je fais de l'initiation à la programmation, et j'ai un exercice à faire
Voici l'énoncé :
Ecrire un programme qui permet de saisir l'âge de 5 personnes puis qui affiche true si au moins 4 personnes sont adultes (âge>=18) et false sinon (ne pas utiliser de conditionnellle)
Voici ce que j'ai écris :
public class ProgAge
{public static void main(String args[])
{ int a,b,c,d,e;
boolean K;
System.out.println("Donnez l'âge des 5 personnes");
a=Lire.i();
b=Lire.i();
c=Lire.i();
d=Lire.i();
e=Lire.i();
K=a>=18 && b>=18 && c>=18 && d>=18 && e>=18 ||
a<=18 && b>=18 && c>=18 && d>=18 && e>=18 ||
a>=18 && b<=18 && c>=18 && d>=18 && e>=18 ||
a>=18 && b>=18 && c<=18 && d>=18 && e>=18 ||
a>=18 && b>=18 && c>=18 && d<=18 && e>=18 ||
a>=18 && b>=18 && c>=18 && d>=18 && e<=18 ||;
System.out.println(K);
}
}

Sachant qu'ils nous ont dit d'utiliser Lire.i() pour déclarer un entier :(
J'ai bon ou mon raisonnement ne tient pas ? Avoir un K aussi grand me parait bizarre :(
Merci d'avoir lu :oui:

blackapplex blackapplex
MP
Niveau 10
20 septembre 2018 à 11:13:49

J'ai bon ou mon raisonnement ne tient pas ?

Ca ne peut pas tenir parce qu'on ne fait en pratique jamais de condition aussi grandes pour des raisons de maintenabilité. Pourquoi?
"Maintenant je veux l'âge de 15 personnes et true si 9 sont agées de plus de 21ans. " :d) Tu ne peux pas le faire facilement.
En l'occurence la bonne solution, c'est de passer par des boucles et de mettre tes variables en amont du code, genre:


lim_age = 18
nb_person = 5
nb_lim_age = 4

ages = liste
pour i de 0 à nb_person:
     age = lire i
     ages.ajoute(age)
count_lim_age = 0
pour i de 0 à nb_person:
     si ages[i] > lim_age:
          count_lim_age += 1
si count_lim_age > nb_lim_age:
      vrai
faux

Le truc à retenir et qui est FONDAMENTAL , c'est de se demander : "et si on me pose le même problème en changeant les valeurs numériques, est-ce que je peux le résoudre en 5secondes ou en 5heures". Avec mon code on peut le faire en 5secondes, avec le tien non.

Il faut faire la différence entre un bon code, et un code qui est correct. Ton code est correct (probablement j'ai pas tout vérifié), mais ça ne peut absolument pas être un bon code, et ce qui est très important c'est de faire du bon code (peut-être même davantage que de faire du code correct). Je préfère arriver sur un projet en me disant "ça marche pas, mais tout est documenté, tu vas mettre 1semaine à le reprendre et à corriger" que de me dire "ça marche, par contre c'est un bordel incroyable, tu vas mettre 3semaines à comprendre et de toute façon derrière si tu veux modifier quelque chose tu vas encore mettre 3semaines"

Message édité le 20 septembre 2018 à 11:17:01 par blackapplex
ouimaisquoi ouimaisquoi
MP
Niveau 8
20 septembre 2018 à 12:23:03

Le 20 septembre 2018 à 11:13:49 blackapplex a écrit :

J'ai bon ou mon raisonnement ne tient pas ?

Ca ne peut pas tenir parce qu'on ne fait en pratique jamais de condition aussi grandes pour des raisons de maintenabilité. Pourquoi?
"Maintenant je veux l'âge de 15 personnes et true si 9 sont agées de plus de 21ans. " :d) Tu ne peux pas le faire facilement.
En l'occurence la bonne solution, c'est de passer par des boucles et de mettre tes variables en amont du code, genre:


lim_age = 18
nb_person = 5
nb_lim_age = 4

ages = liste
pour i de 0 à nb_person:
     age = lire i
     ages.ajoute(age)
count_lim_age = 0
pour i de 0 à nb_person:
     si ages[i] > lim_age:
          count_lim_age += 1
si count_lim_age > nb_lim_age:
      vrai
faux

Le truc à retenir et qui est FONDAMENTAL , c'est de se demander : "et si on me pose le même problème en changeant les valeurs numériques, est-ce que je peux le résoudre en 5secondes ou en 5heures". Avec mon code on peut le faire en 5secondes, avec le tien non.

Il faut faire la différence entre un bon code, et un code qui est correct. Ton code est correct (probablement j'ai pas tout vérifié), mais ça ne peut absolument pas être un bon code, et ce qui est très important c'est de faire du bon code (peut-être même davantage que de faire du code correct). Je préfère arriver sur un projet en me disant "ça marche pas, mais tout est documenté, tu vas mettre 1semaine à le reprendre et à corriger" que de me dire "ça marche, par contre c'est un bordel incroyable, tu vas mettre 3semaines à comprendre et de toute façon derrière si tu veux modifier quelque chose tu vas encore mettre 3semaines"

ça c'est bien vrai !

Batora Batora
MP
Niveau 10
20 septembre 2018 à 15:05:22

Moi je te conseillerait plutôt de faire un truc du genre après avoir récupéré les ages dans un array.


int nombre_adultes_min = 4;
int nombre_adultes= Stream.of(ages).filter(age -> age >= 18).count();

bool nbr_adultes_suffisant = nombre_adultes >= nombre_adultes_min;

System.out.println(nbr_adultes_suffisant);

blackapplex ton code est bien mais c'est un peu chiant d'avoir 10 lignes de boucles et de conditionnelle pour un si petit truc mieux vaut utiliser un filter, et en plus il a pas d=le droit d'utiliser les conditionnelles dans son exo.

La le code est court et auto-descriptif grâce au noms de variables.

Après j'ai pas testé le code je suis sur mon portable et je fais pas de java j'ai peut-etre laissé passer une bourde dans le code.

Mr_Wright Mr_Wright
MP
Niveau 10
20 septembre 2018 à 16:28:49

Merci beaucoup pour vos réponses, je ferai en sorte d'avoir un code facilement modifiable maintenant :oui:

dark_drow dark_drow
MP
Niveau 15
21 septembre 2018 à 18:02:29

@batora c'est plus lisible mais quand on démarre la programmation on s'entraîne sur les boucles et les conditions :)

Batora Batora
MP
Niveau 10
21 septembre 2018 à 18:24:01

Le 21 septembre 2018 à 18:02:29 dark_drow a écrit :
@batora c'est plus lisible mais quand on démarre la programmation on s'entraîne sur les boucles et les conditions :)

Il n'a pas le droit aux conditions dans son exo.

blackapplex blackapplex
MP
Niveau 10
21 septembre 2018 à 21:57:10

Le 21 septembre 2018 à 18:24:01 Batora a écrit :

Le 21 septembre 2018 à 18:02:29 dark_drow a écrit :
@batora c'est plus lisible mais quand on démarre la programmation on s'entraîne sur les boucles et les conditions :)

Il n'a pas le droit aux conditions dans son exo.

ah c'était ça le "ne pas utiliser de conditionnel" ?
Je suis pas sûr de voir l'utilité :pf:
Dans ce cas pour mon code tu fais: count_lim_age += int(ages[i] > lim_age) :rire:
et puis return count_lim_age > nb_lim_age
J'ai tendance à être un peu littéraire dans mon code parfois, c'est rare qu'on demande des one liners, la lisibilité prime

Message édité le 21 septembre 2018 à 21:57:32 par blackapplex
MisterCuck MisterCuck
MP
Niveau 10
22 septembre 2018 à 11:03:01

Le 20 septembre 2018 à 15:05:22 Batora a écrit :
Moi je te conseillerait plutôt de faire un truc du genre après avoir récupéré les ages dans un array.


int nombre_adultes_min = 4;
int nombre_adultes= Stream.of(ages).filter(age -> age >= 18).count();

bool nbr_adultes_suffisant = nombre_adultes >= nombre_adultes_min;

System.out.println(nbr_adultes_suffisant);

blackapplex ton code est bien mais c'est un peu chiant d'avoir 10 lignes de boucles et de conditionnelle pour un si petit truc mieux vaut utiliser un filter, et en plus il a pas d=le droit d'utiliser les conditionnelles dans son exo.

La le code est court et auto-descriptif grâce au noms de variables.

Après j'ai pas testé le code je suis sur mon portable et je fais pas de java j'ai peut-etre laissé passer une bourde dans le code.

C'est la bonne solution.


import java.util.Scanner;
import java.util.stream.IntStream;

public class Main {

   public static void main(String[] args) {
      Scanner input = new Scanner(System.in);
      long nbrAdultes = IntStream.range(0,5)
              .map(i -> input.nextInt())
              .filter(age -> age >= 18)
              .count();

      System.out.println(nbrAdultes > 3);
   }
}
DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment