NFA035 Devoir 1

Ce premier devoir est surtout l'occasion de prendre en main le système de rendu des devoirs.

Rendez le devoir bien avant la date limite, pour anticiper les éventuels problèmes techniques que vous pourriez avoir. Souvenez-vous de ce que vous pouvez effectuer plusieurs rendus. Vous pouvez même faire un premier rendu avec simplement le sujet !

Le devoir ne pourra pas être rendu par mail : passez impérativement par le logiciel de rendu. Si vous avez des problèmes ou des questions sur le rendu des devoirs, n'hésitez pas à nous demander.

Connexion

Commencez par vous connecter sur le site de gestion des devoirs. Un compte vous y a été créé. Votre identifiant est l'adresse mail que vous avez sur lecnam.net. Par exemple ada.lovelace.auditeur@lecnam.net.

Pour recevoir un mot de passe, tapez votre identifiant dans login, et cliquez sur le bouton mot de passe oublié. Un mot de passe temporaire vous sera expédié sur votre mail lecnam.net.
Changez immédiatement de mot de passe (ce mot de passe temporaire n'est valable qu'une fois). Pour cela connectez-vous, et cliquez le bouton :

).

En cas de problème, contactez l'un des enseignants, qui pourra vérifier quel est votre login

Le logiciel de rendu permet de tester votre devoir, et vous donne le nombre de bonnes réponses, avec quelques informations sur vos erreurs. Vous pouvez rendre votre devoir plusieurs fois, seule la dernière tentative sera prise en compte. En revanche, vous êtes limités à trois remises de devoir par jour. Donc n'attendez pas le dernier moment !!!!!!!!!!!!

Il est impératif de respecter la disposition des classes, des packages et leur nom dans le projet, sinon, la vérification échouera (et votre réponse sera considérée comme fausse).

Ne changez jamais l'interface des méthodes que nous vous demandons d'écrire : ne modifiez pas leurs arguments, et n'ajoutez pas de nouvelles exceptions à celles qui sont déclarées. Sinon, les tests ne tourneront pas correctement.

Le logiciel de rendu nous expédie aussi le contenu de votre devoir (les classes java). Nous pourrons le regarder (pour les cas où un test automatique n'est pas adapté, ou pour détecter des plagiats).

Devoir

Téléchargez le sujet du devoir.

Dans la classe Decoupeur, écrire la fonction decouper() qui découpe une chaîne de caractères selon une liste de séparateurs.

Par exemple, si on appelle

  String tab[]= Decoupeur.decouper("139.32.12.13:80", "...:");

On s'attend à ce que tab vaille {"139", "32", "12", "13", "80"}

Plus précisément, decoupeur prend comme arguments deux chaînes. La première est la chaîne à découper. La seconde contient les séparateurs, dans l'ordre où ils devront être utilisés. Le résultat est un tableau de chaînes qui contient le résultat du découpage.

La première case de ce tableau contient le texte depuis le début jusqu'à la première occurrence du premier premier séparateur ; la seconde case contient le texte compris entre la première occurrence du premier séparateur et la première occurrence dans la suite de la chaîne du second séparateur, etc.

La spécification de la méthode est précisée par sa javadoc :

/**
 * Découpe une chaîne de caractères en utilisant successivement des séparateurs.
 * <p>Motivation: on a, par exemple, une date, donnée avec le format "1/2/2016 16:34",
 * et on voudrait en isoler les diverses parties (1, 2, 2016, 16 et 34). On 
 * a, dans ce cas, les séparateurs suivants: "/", "/", " " et ":". 
 * On appellera donc notre méthode avec comme second argument "// :".
 * 
 * La méthode va retourner un tableau de String, dont la première case contiendra 
 * le texte compris entre le début de la chaîne et le premier séparateur, 
 * la seconde case, le texte entre le premier et le second séparateur, et ainsi de suite.
 * Si deux séparateurs se suivent immédiatement dans la chaîne source, le tableau contiendra
 * une case avec la chaîne vide ("").
 * Si un séparateur manque (ou n'est pas bien placé), la méthode devra lever {@link IllegalArgumentException}.
 * Par exemple, ce serait le cas si nous avions comme source "16:34 1/2/2016" avec comme 
 * argument pour separateurs "// :".
 * 
 * Vous ne pouvez pas utiliser les regexp pour ce devoir.
 * 
 * Si source ou separateurs sont null, vous devez lever une {@link NullPointerException}
 * si la liste de séparateurs est vide, le résultat sera un tableau d'une case,
 * contenant l'intégralité de la chaîne source.
 * La dernière chaîne du tableau résultat correspond au texte source après le 
 * dernier séparateur de la chaîne separateurs.
 * @param source la chaîne à découper.
 * @param separateurs les séparateurs à utiliser
 * @return les morceaux de la chaîne qui ont été isolés.
 * @throws IllegalArgumentException si les séparateurs ne sont pas correctement trouvés dans la liste,
 * @throws NullPointerException si source ou separateurs est null
 */
public static String[] decouper(String source, String separateurs) 

Conseils

Nous déconseillons fortement l'utilisation de split(). Cette méthode est pleine de pièges - et ne correspond pas vraiment à ce qui est demandé. Vous pouvez très bien faire l'exercice avec charAt() et length() comme seules méthodes de String. Sinon, indexOf est assez adaptée.

Vous serez évalués sur un jeu de tests réalisé par nos soins, mais qui ne vous sera pas précisément communiqué. Nous vous fournissons quelques tests de base. Vous pouvez en ajouter dans la classe TestsPourVousGuider.

source séparateurs Résultat attendu
"un:deux,trois" ":," {"un", "deux", "trois"}
"un:deux,trois:quatre:cinq" ":,:" {"un", "deux", "trois", "quatre:cinq"}
"un a:deux:trois:quatre:cinq" ":::" {"un a", "deux", "trois", "quatre:cinq"}
"un a-deux!trois+quatre:cinq" "-!+" {"un a", "deux", "trois", "quatre:cinq"}
"un a::deux:trois:quatre" ":::" {"un a", "", "deux", "trois:quatre"}
"un.deux*trois" ".*" {"un", "deux", "trois"}
"un,deux:trois" ":" {"un,deux", "trois"}
"un,deux::trois" "::" {"un,deux", "", "trois"}
"un:deux trois" " :" (un espace avant le :) IllegalArgumentException

Utilisation du logiciel de rendu (depuis eclipse)

Commencez par faire le devoir. Utilisez les tests inclus pour vous aider (et pour lever certaines ambiguïtés).

S'il vous affiche que vous avez N tests et 0 erreurs, tout est bon. Si votre projet contient des erreurs, vous aurez le nombre d'erreurs et quelques indications sur les erreurs.