Bonsoir,
J'essaie d'apprendre Java, je suis un "ancien" programmeur Turbo Pascal Pascal Objet - Lazarus (de niveau très moyen), je me remets à la programmation après une bonne douzaine d'années d'arrêt, j'ai choisi Java pour des raisons professionnelles essentiellement mais je ne travaille pas dans le domaine informatique évidemment. Je travaille présentement sur un exercice tiré d'un MOOC.
L'exercice ne me pose pas de problème, en revanche, j'ai un nouveau bug alors que je n'en avais pas, sans aucune modification de mon code je précise.
Je suis sous Linux Ubuntu et j'ai DRJava comme EDI (c'était ce qui était préconisé par le MOOC et c'est simple : ça me va pour apprendre). Je ne demande aucune aide sur l'exercice que j'ai quasiment fini (découper un fichier CSV en trois champs avec vérification du format de saisie) mais je voudrais savoir ce qui se passe pour ce bug.
J'ai effectivement changé quelque chose : au lieu de "compiler" mon programme via DRJava j'ai installé open-JDK.6.0 pour pouvoir le compiler et l'exécuter en dehors de la console de DRJava, depuis dès que je compile mon programme il me met cette erreur que je n'avais pas auparavant (mais je ne sais pas ce qu'il utilisait auparavant pour compiler, hélas). Désolé je suis un peu paumé avec tous ces runtime, JVM, trucs divers, je n'ai pas encore l'habitude mais ça viendra. Cela ne fait que 15 jours que je m'y suis (re)mis.
Voici mon code :
J'ai vu ici et là que cette exception était liée à un objet non instancié ou une référence invoquée qui avait la valeur "null", bon je comprends le principe je crois, mais je ne vois pas comment il s'applique à mon bout de code. Je me demande vaguement si ce n'est pas lié à l'objet "Scanner", c'est juste une suspicion (il a été donné tel quel dans les consignes de l'exo et je ne sais pas comment il fonctionne). Comme je n'en suis pas sûr et qu'avant ça fonctionnait très bien, je suis dans le brouillard...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 //Le test fonctionne sur DrJava, mais pour etre reconnu par le correcteur il faut rejeter dans vos tests des formats non conformes comme //pas de ; //1 nom sans prenom, //des dates sans / //ou des annees à 5 chiffres import java.util.Date; import java.util.Scanner; public class CSV { public static void main(String[] args){ String ligneCSV; Scanner sc = new Scanner(System.in); // creation d'un objet scanner ligneCSV = sc.nextLine(); // lecture d'une ligne et sauvegarde dans ligneCSV int first_comma = ligneCSV.indexOf(";"); //reste à tester la presence du prenom String[] data = ligneCSV.split(";"); // découpage en trois sous-chaînes nom / prenom / date String nom = data[0]; String prenom = data[1]; int l_chaine_nom = nom.length(); int l_chaine_prenom = prenom.length(); String datestr = data[2]; String[] dmy = datestr.split("/"); // découpage en trois sous-chaînes jour/mois/année //test guillemets if (nom.charAt(0) != '\"' | nom.charAt(l_chaine_nom-1) != '\"' | prenom.charAt(0) != '\"' | prenom.charAt(l_chaine_prenom-1) != '\"') { // on doit entourer un caractère par de simples quotes ' ' et une string par des doubles " " ! System.out.println("Erreur de format"); } // test format date else if (datestr.length() != 10 | datestr.charAt(2) != '/' | datestr.charAt(5) != '/'){ System.out.println("Erreur de format"); } else { Integer day = new Integer(dmy[0]); int jour = day.intValue(); Integer month = new Integer(dmy[1]); int mois = month.intValue(); Integer year = new Integer(dmy[2]); int annee = year.intValue(); Date naiss = new Date(annee-1900,mois-1,jour); // création objet date System.out.println(nom); System.out.println(prenom); System.out.println(naiss.toString()); } // fin else } }
Si quelqu'un avait la gentillesse de m'expliquer ce serait super, merci d'avance. Désolé pour cette question sans doute idiote mais je nage, là.
Partager