LABORATORIO 12 - ultimi argomenti ================================= for(;;) lettura da file split e Scanner per estrarre parole da un testo l'interfaccia Comparable e il metodo compareTo Array multidimensionali ______________________________________________________ uso di for(;;) e alternative ---------------------------- esempi di codice java per leggere una sequenza di interi, terminata dall'intero 0, Esempio 1: for(;;) { int n = in.nextInt( ); if ( n == 0 ) break ; //resto del programma } Esempio 2: while( (n = in.nextInt( )) != 0) { //resto del programma } Esempio completo: import java.util.Scanner; public class CicloLettura { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = 0; int count = 0; while( (n = in.nextInt( )) != -1) { if(n>10 && n<99 && n%10==5) { count++; System.out.println(n); } } System.out.println("In tutto sono " + count); } } ______________________________________________________ lettura da file --------------- del tutto simile alla lettura da tastiera. Ecco un esempio completo: import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class LetturaFile { public static void main(String[] args) throws FileNotFoundException { String nomeFile = args[0]; File file = new File(nomeFile); Scanner in = new Scanner(file); while( in.hasNextLine() ) { String riga = in.nextLine(); System.out.println(riga); } } } ______________________________________________________ split e Scanner per estrarre parole da un testo ----------------------------------------------- Il metodo split della classe String restituisce un array di stringhe. Come argomento vuole una striga di separatori (vedi la classe Pattern per separatori complessi. Ad esempio per considerare separatori spazio, tab e a capo, anche consecutivi, la stringa da passare come argomento e` "[ \t\n]+" ) while( in.hasNextLine() ) { String riga = in.nextLine(); String[] parola = riga.split(" "); //qui il separatore e` lo spazio for(String s : parola) System.out.print(s + "-"); System.out.println(); } Uno Scanner puo` essere usato per acquisire testo da tastiera, file, ma anche da una stringa: while( in.hasNextLine() ) { String riga = in.nextLine(); Scanner tokenizer = new Scanner(riga); //tokenizer.useDelimiter(" "); //qui il separatore e` lo spazio tokenizer.useDelimiter("[ \t\n]+"); //qui il separatore e` piu' complesso while( tokenizer.hasNext() ) System.out.println(tokenizer.next()); } ______________________________________________________ l'interfaccia Comparable e il metodo compareTo ---------------------------------------------- L'interfaccia Comparable serve per poter definire criteri di confronto per le classi. Va dichiarata nell'intestazione della classe. Es.: public class Persona implements Comparable Tra i metodi della classi si deve implementare il metodo compareTo. Es.: public int compareTo(Persona altra) //l'ordine qui e` quello lessicografico, per cognome e poi per nome { String thisPersona = this.cognome+this.nome; String altraPersona = altra.cognome+altra.nome; return thisPersona.compareTo(altraPersona); } Se ho un ArrayList di comparable, posso ordinarlo con il metodo statico sort della classe Collections Collections.sort(listaPersone); ______________________________________________________ Array multidimensionali ----------------------- sono di fatto array di array. Considerando quelli bidimensionali, il primo indice e` per le righe e il secondo per le colonne. Es. : int[][] matrice = new int[righe][colonne];