Exercices Java - Types primitifs, affichage et conversions
Exercices Java - Types primitifs, affichage et conversions
Problème 1 : Gestion des stocks - GeniusNetworkTech SARL
Contexte : L'entreprise GeniusNetworkTech SARL doit développer un système de gestion de stock pour ses produits informatiques. Vous devez créer un programme qui calcule les statistiques de stock en utilisant différents types primitifs et conversions.
public class GestionStockGeniusNetwork { public static void main(String[] args) { // Données initiales du stockint routeursEnStock = 150; int switchesEnStock = 85; int cablesReseauEnStock = 1250; double prixRouteur = 299.99; float prixSwitch = 149.50f; double prixCable = 12.75; // Exercice 1: Calcul du nombre total d'articlesint totalArticles = routeursEnStock + switchesEnStock + cablesReseauEnStock; System.out.println("Nombre total d'articles en stock: " + totalArticles); // Exercice 2: Conversion et calcul de la valeur totale du stockdouble valeurRouteurs = routeursEnStock * prixRouteur; double valeurSwitches = switchesEnStock * prixSwitch; // Conversion float → doubledouble valeurCables = cablesReseauEnStock * prixCable; double valeurTotaleStock = valeurRouteurs + valeurSwitches + valeurCables; System.out.println("Valeur totale du stock: " + valeurTotaleStock + " €"); // Exercice 3: Calcul du prix moyen par articledouble prixMoyen = valeurTotaleStock / totalArticles; System.out.println("Prix moyen par article: " + prixMoyen + " €"); // Exercice 4: Conversion avec perte de précisionint valeurTotaleApprox = (int) valeurTotaleStock; System.out.println("Valeur totale approximative (sans décimales): " + valeurTotaleApprox + " €"); // Exercice 5: Gestion des pourcentagesdouble pourcentageRouteurs = (routeursEnStock * 100.0) / totalArticles; double pourcentageSwitches = (switchesEnStock * 100.0) / totalArticles; double pourcentageCables = (cablesReseauEnStock * 100.0) / totalArticles; System.out.println("\nRépartition du stock:"); System.out.printf("Routeurs: %.2f%%\n", pourcentageRouteurs); System.out.printf("Switches: %.2f%%\n", pourcentageSwitches); System.out.printf("Câbles: %.2f%%\n", pourcentageCables); // Exercice 6: Utilisation d'underscores pour la lisibilitéint stockMaximal = 10_000; double budgetMaximal = 1_000_000.00; System.out.println("\nLimites de l'entrepôt:"); System.out.println("Capacité maximale: " + stockMaximal + " articles"); System.out.println("Budget maximal: " + budgetMaximal + " €"); } }
Questions sur le Problème 1 :
Quelle est la différence entre l'utilisation de float et double pour les prix ?
Pourquoi utilise-t-on 100.0 dans le calcul des pourcentages ?
Quelle information est perdue lors de la conversion en int de la valeur totale ?
Réponses :
float utilise 32 bits avec environ 6-7 chiffres significatifs, double utilise 64 bits avec environ 15-16 chiffres significatifs. double offre plus de précision.
On utilise 100.0 (double) plutôt que 100 (int) pour forcer une division en virgule flottante et éviter la troncature entière.
La partie décimale (centimes) est perdue lors de la conversion en int.
Problème 2 : Conversions de types - GeniusHalloHallo
Contexte : L'entreprise GeniusHalloHallo organise des événements pour Halloween et doit convertir différentes unités de mesure pour la préparation des bonbons, décoration et gestion des invités.
public class ConversionsHalloween { public static void main(String[] args) { // Données pour la fête d'Halloweenint nombreInvites = 127; double bonbonsParInvite = 15.75; float litresBoisson = 25.5f; // Exercice 1: Conversion implicite et calcul total de bonbonsdouble totalBonbons = nombreInvites * bonbonsParInvite; System.out.println("Total de bonbons nécessaires: " + totalBonbons); // Exercice 2: Conversion explicite avec arrondiint bonbonsArrondis = (int) Math.round(totalBonbons); System.out.println("Bonbons arrondis: " + bonbonsArrondis); // Exercice 3: Conversion entre types entiersbyte petitsSachets = (byte) nombreInvites; System.out.println("Nombre de petits sachets (byte): " + petitsSachets); // Exercice 4: Gestion des boissons avec conversion float → doubledouble verresParLitre = 5.0; double totalVerres = litresBoisson * verresParLitre; int verresEntiers = (int) totalVerres; System.out.println("Total de verres disponibles: " + totalVerres); System.out.println("Verres entiers: " + verresEntiers); // Exercice 5: Conversions avec débordementshort grandNombre = 32_767; byte petitNombre = (byte) grandNombre; System.out.println("Conversion short → byte: " + grandNombre + " → " + petitNombre); // Exercice 6: Utilisation des littéraux avec underscoresint budgetTotal = 5_000_000; long grainsConfettis = 10_000_000_000L; double metresGuirlande = 1_250.75; System.out.println("\nDétails de l'événement:"); System.out.println("Budget total: " + budgetTotal + " centimes"); System.out.println("Grains de confettis: " + grainsConfettis); System.out.println("Mètres de guirlande: " + metresGuirlande); // Exercice 7: Conversions char et intchar premiereLettre = 'H'; int codeAscii = premiereLettre; char lettreSuivante = (char) (codeAscii + 1); System.out.println("\nJeu de caractères:"); System.out.println("Lettre: " + premiereLettre); System.out.println("Code ASCII: " + codeAscii); System.out.println("Lettre suivante: " + lettreSuivante); // Exercice 8: Problèmes de précision avec les flottantsdouble compteBonbons = 0.0; for (int i = 0; i < 10; i++) { compteBonbons += 0.1; } System.out.println("\nProblème de précision:"); System.out.println("10 × 0.1 = " + compteBonbons); System.out.println("Égal à 1.0? " + (compteBonbons == 1.0)); } }
Questions sur le Problème 2 :
Pourquoi la conversion de 32_767 (short) en byte donne-t-elle -1 ?
Quelle est la différence entre (int) totalBonbons et (int) Math.round(totalBonbons) ?
Pourquoi 10 × 0.1 n'est-il pas exactement égal à 1.0 en Java ?
Réponses :
32_767 dépasse la capacité d'un byte (-128 à 127). Le débordement donne -1 car 32_767 en binaire est 0111111111111111, et en ne gardant que les 8 derniers bits on obtient 11111111 qui représente -1 en complément à deux.
(int) totalBonbons tronque la partie décimale, tandis que (int) Math.round(totalBonbons) arrondit mathématiquement à l'entier le plus proche.
0.1 ne peut pas être représenté exactement en binaire (comme 1/3 en décimal), ce qui entraîne des erreurs d'arrondi cumulatives lors des additions répétées.
Questions supplémentaires - 20 questions/réponses
Question 1: Types de littéraux
Quel est le type de chaque littéral : 3.14, 2.718f, 100L, 0xFF ?
Quelle conversion automatique se produit dans : double resultat = 5 + 2.5; ?
Le entier 5 est converti automatiquement en double (5.0) avant l'addition.
Question 3: Séquences d'échappement
Que produit System.out.println("Ligne1\nLigne2\tTab"); ?
Ligne1
Ligne2 Tab
Question 4: Casting explicite
Que vaut (int) 19.99 et pourquoi ?
19 - le casting tronque la partie décimale sans arrondir.
Question 5: Débordement
Que vaut (byte) 200 et pourquoi ?
-56 - 200 dépasse la capacité d'un byte (-128 à 127), débordement circulaire.
Question 6: Comparaison flottants
Pourquoi éviter == avec les nombres flottants ?
À cause des erreurs d'arrondi en représentation binaire, utiliser plutôt une comparaison avec marge d'erreur.
Question 7: Conversion char-int
Que vaut int code = 'A'; ?
65 - code ASCII/Unicode du caractère 'A'.
Question 8: Littéraux avec underscores
Est-ce que int x = 1_000_000; est valide ?
Oui, les underscores améliorent la lisibilité (Java 7+).
Question 9: Division entière
Que vaut 5 / 2 en Java ?
2 - division entière qui tronque le résultat.
Question 10: Conversion automatique dans les expressions
Quel est le type du résultat : byte b = 10; short s = 20; int result = b + s; ?
int - les opérations sur byte et short produisent un int.
Question 11: Valeurs spéciales flottantes
Que représentent Double.POSITIVE_INFINITY et Double.NaN ?
Infini positif et "Not a Number" (résultat d'opérations non définies comme 0/0).
Question 12: Portée des types entiers
Quelles sont les valeurs minimales et maximales pour int ?
-2³¹ à 2³¹-1 (-2,147,483,648 à 2,147,483,647).
Question 13: Conversion float-double
Pourquoi float f = 1.1; génère une erreur ?
1.1 est un double par défaut, il faut écrire float f = 1.1f;.
Question 14: Affichage formaté
Que fait System.out.printf("Valeur: %.2f", 3.14159); ?
Affiche "Valeur: 3.14" - formate avec 2 décimales.
Question 15: Opérations mixtes
Quel est le type de 10 + 2.5 * 3 ?
double - la présence d'un opérande double convertit toute l'expression en double.
Question 16: Conversion boolean
Peut-on convertir un boolean en int ?
Non, les boolean ne sont pas convertibles en types numériques.
Question 17: Notation scientifique
Que représente 1.5e3 ?
1.5 × 10³ = 1500.0 (double).
Question 18: Taille mémoire
Quelle est la taille en bits de double ?
64 bits.
Question 19: Conversion restrictive implicite
Pourquoi byte b = 100; est valide sans cast ?
Java autorise les conversions restrictives implicites pour les expressions constantes quand la valeur est dans la portée du type cible.
Question 20: Char comme entier
Que vaut 'A' + 1 ?
66 (int) - 'A' vaut 65, promotion char → int avant l'addition.
RAPPELS
Si vous avez trouvé les exercices corrigés en Java de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !
Contact WhatsApp : +237 652027193 | Réaliser Par Joël_Yk
Merci, votre note vient d'être comptabilisée.
Merci, mais vous avez déjà voté pour cette page, réessayez plus tard.
Vous devez être connecté pour pouvoir voter
★★★★★
Aucune note. Soyez le premier à attribuer une note !