[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]

5.11
  Césure - Corrigé
Niveau 2
 
 
Fichiers:
  Cesure.java    

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
import java.util.Scanner;

class Cesure {

    public static void main(String[] args) {
        String[] phrase = lirePhrase();
        System.out.println("Le résultat est : ");
        for (int i = 0; i < phrase.length; i++) {
            cesure(phrase[i]);
        }
    }

    /**
     * Lit une phrase depuis le terminal.
     * @return un tableau de Strings où chaque entrée
     * est un mot de la phrase lue.
     */ 
    static String[] lirePhrase() {
        Scanner scanner = new Scanner(System.in);
        
        int number = 0;
        while (number <= 0) {
            System.out.print("Donnez le nombre de mots de votre phrase : ");
            number = scanner.nextInt();
            if (number <= 0) {
                System.out.println("Entrez une valeur plus grande que 0");
            }
        }

        String[] phrase = new String [number];

        // se debarasser du \n 
        scanner.nextLine();
        for (int i = 0; i < number; i++) {
            System.out.print("Donnez le mot " + (i + 1) + " : ");
            phrase[i] = scanner.nextLine();
        }

        scanner.close();
        
        return phrase;
    }

    /**
     * Réalise la césure pour un mot donné.
     * Pour ce faire, examine les différentes façons de couper
     * le mot: entre l'indice debut et l'indice i et entre i et 
     * la longueur du mot (i variant de 1 à la longueur du mot et 
     * debut étant initialisé à 0).
     * Si la régle de césure s'applique à ces deux parties
     * afficher le "-" et passer à la ligne suivante.
     * Puis, faire le même traitement en considérant la portion de mot
     * entre i et longueur du mot (debut prend la valeur de i)
     * @param mot une String représentant un mot de la phrase
     */ 
    static void cesure(String mot) {
        int debut = 0;
        for (int i = 1; i < mot.length(); i++) {
            char c1 = mot.charAt(i - 1);
            char c2 = mot.charAt(i);
            if ((voyelle(c1) && !voyelle(c2))) {
                String s1 = mot.substring(debut, i);
                String s2 = mot.substring(i, mot.length());
                if ((s1.length() > 1) && (s2.length() > 1)) {
                    if (!(queVoyelles(s1) || queVoyelles(s2))) {
                        System.out.println(s1 + "-");
                        debut = i;
                    }
                }
            }
        }

        String s1 = mot.substring(debut, mot.length());
        System.out.println(s1);
    }

    /**
     * Teste si un caractère est une voyelle.
     * @param c le caractère à tester
     * @return true si c est une voyelle et false sinon
     */ 
    static boolean voyelle(char c) {
        return ((c == 'a') ||
                    (c == 'e') ||
                    (c == 'i') ||
                    (c == 'o') ||
                    (c == 'u') ||
                    (c == 'y'));
    }

    /**
     * Teste si une chaîne de caractères ne contient que des voyelles.
     * @param s la chaîne à tester
     * @return true si s ne contient que des voyelles et false sinon
     */ 
    static boolean queVoyelles(String s) {
        for (int i = 0; i < s.length(); i++) {
            if (!voyelle(s.charAt(i))) {
                return false;
            }
        }
        return true;
    }
}

 


[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]