Skip to content

Exercices série 1

Consignes

  • Ne pas de faire aider par des IA ou genAI

Exercice 1

Créer un programme Java qui permet de jouer à pile ou face, le programme lance une pièce au hasard et demande à l'utilisateur de saisir pile ou face au clavier. Le programme affiche le résultat et si l'utilisateur a gagné ou perdu.

Guess the number
///usr/bin/env jbang "$0" "$@" ; exit $?

import static java.lang.System.*;

import java.util.Scanner;
import java.util.random.RandomGenerator;

public class GuessNumber {

  public static void main(String... args) {
    // var permet de faire du typage implicite
    var randomGenerator = RandomGenerator.getDefault();
    int numberToGuess = randomGenerator.nextInt(1, 21);

    Scanner scanner = new Scanner(System.in);

    int proposition = scanner.nextInt();
    while (proposition != numberToGuess) {
      if (proposition < numberToGuess) {
        System.out.println("Plus");
      } else {
        System.out.println("Moins");
      }
      proposition = scanner.nextInt();
    }
    System.out.println("Gagné");
    scanner.close();
  }
}

Exercice 2

Créer un programme Java qui permet de jouer au jeu de "devine un nombre". Le programme génère un nombre aléatoire entre 1 et 20 (1 et 20 sont inclus) et demande à l'utilisateur de deviner ce nombre. Le programme affiche, pour chaque proposition de l'utilisateur, si le nombre est plus grand ou plus petit que le nombre choisi. Si l'utilisateur trouve le nombre, Le programme affiche le nombre d'essais qu'il lui a fallu pour trouver ce nombre.

Heads or Tails
///usr/bin/env jbang "$0" "$@" ; exit $?

import static java.lang.System.*;

import java.util.Scanner;
import java.util.random.RandomGenerator;

public class HeadsOrTails {

  public static void main(String... args) {

    var randomGenerator = RandomGenerator.getDefault();
    boolean isHeads = randomGenerator.nextBoolean();
    // Opérateur ternaire ? : (ternainre: trois opérandes)
    String side = isHeads ? "pile" : "face";
    // équivalent à ça
    if (isHeads) {
      side = "pile";
    } else {
      side = "face";
    }

    var s = new Scanner(System.in);
    var answer = s.nextLine();
    s.close();

    System.out.println(side);

    if (side.equals(answer)) {
      System.out.println("Gagné");
    } else {
      System.out.println("perdu");
    }
  }
}

Exercice 3

Écrire un programme Java qui permet d'afficher l'inverse d'une chaîne de caractères. Par exemple, si l'utilisateur saisit "Bonjour", le programme affiche "ruojnoB". Ne pas utiliser de méthodes de la classe String (comme reverse).

La chaîne en entrée est passé en argument de la ligne de commande.

Reverse a string
///usr/bin/env jbang "$0" "$@" ; exit $?

import static java.lang.System.*;

public class ReverseManual {

  public static void main(String... args) {
    if (args.length == 0) {
      System.err.println("Usage: ReverseManual inputString");
      exit(1);
    }

    // Récupération de l'argument passé en ligne de commande
    String input = args[0];
    String output = "";
    // StringBuffer propose la méthode setCharAt non disponible dans String
    StringBuffer reversedStringBuffer = new StringBuffer();
    reversedStringBuffer.setLength(input.length());

    for (int i = 0; i < input.length(); i++) {
      output = input.charAt(i) + output;
      reversedStringBuffer.setCharAt(input.length() - i - 1, input.charAt(i));
    }

    System.out.println("solution 1: " + output);
    System.out.println("solution 2: " + reversedStringBuffer);
  }
}
Reverse many strings
///usr/bin/env jbang "$0" "$@" ; exit $?

import static java.lang.System.*;

public class ReverseManualMany {

  public static void main(String... args) {
    if (args.length == 0) {
      System.err.println("Usage: ReverseManual inputString");
      exit(1);
    }

    for (String input : args) {
      String output = "";
      for (int i = 0; i < input.length(); i++) {
        output = input.charAt(i) + output;
      }

      System.out.println(output);
    }
  }
}

Exercice 4

Écrire un programme Java qui permet de dire si une chaîne de caractères est un palindrome. Un palindrome est un mot qui se lit de la même façon de gauche à droite et de droite à gauche. Par exemple, "radar" est un palindrome. Ne pas utiliser de méthode de la classe String. Faire l'exercice avec et sans la méthode equals.

La chaîne en entrée est passé en argument de la ligne de commande.

Exemples:

  • Si on passe "radar" en entrée, le programme affiche "Palindrome"
  • Si on passe "bonjour" en entrée, le programme affiche "Pas un palindrome"
Palindrome
///usr/bin/env jbang "$0" "$@" ; exit $?

import static java.lang.System.*;

public class Palindrome {

  public static boolean isPalindromeWithEquals(String input) {
    String reversed = "";
    for (int i = 0; i < input.length(); i++) {
      reversed = input.charAt(i) + reversed;
    }
    return input.equalsIgnoreCase(reversed);
  }

  public static boolean isPalindromeWithoutEquals(String input) {
    for (int i = 0; i < input.length() / 2; i++) {
      if (input.charAt(i) != input.charAt(input.length() - 1 - i)) {
        return false;
      }
    }
    return true;
  }

  public static void main(String... args) {
    if (args.length == 0) {
      System.err.println("Usage: Palindrome inputString");
      exit(1);
    }
    System.out.println("Is palindrome with equals");
    System.out.println(isPalindromeWithEquals(args[0]) ? "Palindrome" : "Pas un Palindrome");
    System.out.println("Is palindrome without equals: ");
    System.out.println(isPalindromeWithoutEquals(args[0]) ? "Palindrome" : "Pas un Palindrome");
  }
}

Exercice 5

Écrire un programme Java qui permet de saisir un nombre entier et de calculer la somme de ses chiffres. Le programme affiche la somme des chiffres ainsi que le détail du calcul.

Le nombre en entrée est passé en argument de la ligne de commande.

Exemples :

  • Si on passe 123 en entrée, le programme affiche "6 (1 + 2 + 3 = 6)"
  • Si on passe 1234 en entrée, le programme affiche "10 (1 + 2 + 3 + 4 = 10)"
Count digits
///usr/bin/env jbang "$0" "$@" ; exit $?

import static java.lang.System.*;

public class CountDigits {

  public static void main(String... args) {
    if (args.length == 0) {
      System.err.println("Usage: CountDigits inputNumber");
      exit(1);
    }
    int input = Integer.parseInt(args[0]);
    String detail = " (";
    int sum = 0;
    // Pour ne pas afficher le + dans le détail du calcul du premier nombre
    boolean isFirst = true;
    while (input != 0) {
      int digit = input % 10;
      String prefix = isFirst ? "" : " + ";
      detail += prefix + digit;
      isFirst = false;
      input = input / 10;
      sum += digit;
    }
    detail += ")";

    System.out.println(sum + detail);
  }
}

Exercice 6

Créer un programme Java qui permet de saisir un entier et de vérifier si cet entier est un nombre premier.

Le nombre en entrée est récupéré via le Scanner.

Rappel : un nombre premier est un nombre qui qui est divisible par exactement deux entiers disctints (qui sont 1 et le nombre-même). 0 et 1 ne sont pas des nombres premiers par définition (1 n'est pas divisible par deux nombres distincts).

Is prime ?
///usr/bin/env jbang "$0" "$@" ; exit $?

import static java.lang.System.*;

import java.util.Scanner;

public class IsPrime {

  public static void main(String... args) {
    System.out.println("Veuillez saisir un entier positif et on vous dira s'il est premier.");

    Scanner scanner = new Scanner(System.in);
    long input = scanner.nextLong();
    scanner.close();
    if (input < 0) {
      System.err.println("ce n'est pas un nombre positif");
      exit(1);
    } else if (input < 2) {
      System.out.println("ce n'est pas un nombre premier");
      exit(1);
    } else if (input == 2) {
      System.out.println("c'est un nombre premier");
      exit(0);
    }

    for (long i = 2; i < input / 2; i++) {
      if (input % i == 0) {
        System.out.println("Ce n'est pas un nombre premier");
        exit(1);
      }
    }
    System.out.println("C'est un nombre premier");
  }
}