Plan Java: Langage, entrées et sorties • Structure d’un programme • Les entrées sorties Joël Quinqueton Dépt MIAp, UFR IV UPV − Université Montpellier III Java • La programmation ajoute à l’écriture des algorithmes la difficulté de les formuler selon des règles strictes (et propres au langage utilisé) • Utilisation stricte de – délimiteurs : point-virgule, accolade, parenthèse, etc. – mots réservés : types de variable, formulation des boucles, etc. Java – classe et fichier public class PremierProgramme { /** * Un premier programme Java pour débuter */ public static void main(String[] args) { System.out.println("Bienvenue au club !"); System.out.println("Hello"); } } • Fichier PremierProgramme.java Java – un exemple public class PremierProgramme { /** * Un premier programme Java pour débuter */ public static void main(String[] args) { System.out.println("Bienvenue au club !"); System.out.println("Hello"); } } Java – public ? public class PremierProgramme { /** * Un premier programme Java pour débuter */ public static void main(String[] args) { System.out.println("Bienvenue au club !"); System.out.println("Hello"); } } 1 Java – blocs et accolades public class PremierProgramme { /** * Un premier programme Java pour débuter */ public static void main(String[] args) { System.out.println("Bienvenue au club !"); System.out.println("Hello"); } } Java – variables • Variables : il faut les annoncer avant de les utiliser, et préciser leurs types /** des nombres entiers */ déclaration int entier1, entier2; entier1 = 10; initialisation entier2 = 2; affectation entier2 = entier2 + 3 * entier1; /** un nombre en virgule flottante */ Déclaration ET initialisation float reel = 3.1415926589; Java – commentaires • Commentaires : ils sont placés entre « /* » et « */ » (dans cet ordre) public class PremierProgramme { /** * Un premier programme Java pour débuter */ public static void main(String[] args) { System.out.println("Bienvenue au club !"); System.out.println("Hello"); } } Java – static void main … public class PremierProgramme { /** * Un premier programme Java pour débuter */ public static void main(String[] args) { System.out.println("Bienvenue au club !"); System.out.println("Hello"); } } Java – instructions • Instructions : elles sont marquées par des points-virgules public class PremierProgramme { /** * Un premier programme Java pour débuter */ public static void main(String[] args) { System.out.println("Bienvenue au club !"); System.out.println("Hello"); } } Java – affichage à l’écran public class PremierProgramme { /** * Un premier programme Java pour débuter */ public static void main(String[] args) { System.out.println("Bienvenue au club !"); System.out.println("Hello"); } } 2 Java – affichage à l’écran • • • • Avec saut de fin de ligne System.out.println(…); Sans saut de fin de ligne System.out.print(…); Java – lecture au clavier public class Addition { public static void main(String[] args) { int entier1, entier2; entier1 = Keyboard.readInt(); entier2 = Keyboard.readInt(); System.out.println("La somme des entiers " + entier1 + " et " + entier2 + " vaut " + (entier1 + entier2)); } } Java – classe String • Un type complexe qui désigne les chaînes de caractères • Une classe qui met à disposition un ensemble d’opérations et de transformations sur les chaînes de caractères Java – lecture au clavier • Classe Keyboard que l’on suppose prédéfinie • Lecture d’un entier • Keyboard.readInt(); • Lecture d’un réel • Keyboard.readFloat(); Java – chaînes de caractères • Un caractère : une lettre qui se code en mémoire par un entier (code ASCII, Unicode) • Une chaîne de caractères : une suite de caractères en mémoire • On les traite comme des objets à part entière • On leur applique des opérations et des transformations Java – classe String String chaine1; chaine1 = "Voilou !!!"; String chaine2 = Keyboard.readString(); System.out.println(chaine1 + " " + chaine2); 3 String – recherche String chaine = "Voilou !!!"; int position = chaine.indexOf(‘o’); /** retourne la position du premier "o", soit 1 */ position = chaine.indexOf(‘o’ , position); /** retourne la position du second "o" */ Tableaux en java • Suite de taille fixe d’objets de même type • Déclaration: float [] tabr; Button [] tb; • Réservation: tabi = new int[10]; tb = new Button [5]; • Affectation: tabi[i] = j; tb[i] = new Button(« bonjour »); Boucles - while • Sommes des N premiers entiers int N = Keyboard.readInt(); int k = 1; int somme = 0; while (k <= N) { somme = somme + k; k = k + 1; } • While = « tant que » String – extraction String chaine = "Voilou !!!"; int position = chaine.indexOf(‘o’); String ch1 = chaine.substring(0, position); /** retourne le début de la chaine avant "o" */ Conditionnelles • Instruction if – Pas de then • La condition doit être exprimée entre parenthèses • Imbrication du bloc d’instruction sousl’effet de la condition : { } • If (test) {bloc exécuté si le est est vrai} else {bloc exécuté si le test est faux} Boucles - for • L’expression for intègre les trois ingrédients de la boucle int N = Keyboard.readInt(); int somme = 0; for(int k = 1; k <= N; k = k+1) { somme = somme + k; } • la variable k n’est utilisée que pour la boucle • sa déclaration est faite dans le corps de l’instruction 4 Entrées / Sorties: le problème • L’utilisateur doit-il coder un nombre dans la norme IEEE pour le communiquer à un programme ? • Les humains sont habitués à réfléchir en base 10 / Les ordinateurs se régalent de la base 2 • Les humains utilisent souvent le clavier pour communiquer avec un programme Entrées / Sorties en Java Entrées / Sorties: leur nature • Pour l’ordinateur la donnée en entrée est d’abord une suite de caractères (une chaîne de caractères) • Les résultats d’un programme (les sorties) sont souvent une suite de caractères (affichés à l’écran) …«2», «4», … Programme Java… « 2 + 4 = 6 »,… Flots d’entrée et de sortie System.out • Un programme Java reçoit/transmet des données au monde extérieur via un flot (stream) • Ces flots sont des objets de types complexes • System.in et System.out • sont des flots connectés à tout programme pour communiquer via les entrées/sorties standard Programme Java System.in Entrées / Sorties dans un programme import java.io.*; public class Echo { public static void main (String[] args) throws IOException { InputStreamReader inStream = new InputStreamReader( System.in ); BufferedReader stdin = new BufferedReader( inStream ); String inData; System.out.println("Enter the data:"); inData = stdin.readLine(); System.out.println("Input : " + inData); } } Flots tamponnés BufferedInputStream Java Monde extérieur 5 Entrées / Sorties • Avant d’être un nombre … – Une chaîne de caractères (en entrée) doit être « convertie » en un type connu d’avance • Un nombre (en sortie) doit être « converti » en une chaîne de caractères • Les routines de conversion sont différentes et définies pour chacun des types primitifs Lecture de données numériques • Conversion d’une chaîne de caractères en un entier de type int – La classe Integer (un objet de type Integer) possède une méthode de conversion chaîne de caractères <-> codage à complément à 1 • La classe Integer possède aussi des méthodes de conversion en short et long Lecture de nombres: exemple import java.io.*; public class EchoInt { public static void main (String[] args) throws IOException { BufferedReader stdin = new BufferedReader( newInputStreamReader(System.in)); String inData; int num; System.out.println("Entrez un entier:"); inData = stdin.readLine(); num = Integer.parseInt(inData); System.out.println("L’entier lu: " + num); } } 6