Metodologie di Programmazione a.a. 2008-2009
(canale E-O)
Soluzioni 1 aprile 2009
Esercizi [Linee] e [Parole]
import java.util.*;
import java.io.*;
import static java.lang.System.*;
public class TextFile {
private File srcFile; // mantiene la localizzazione del file
private Scanner fileScan; // lo Scanner che interpreta il contenuto del file
public TextFile(String pathname) throws FileNotFoundException {
srcFile = new File(pathname);
fileScan = new Scanner(srcFile);
}
public String nextWord() {
// imposta il delimitatore di tokens come una sequenza massimale di caratteri
fileScan.useDelimiter("[^\\p{Alpha}]+"); // che non contiene caratteri alfabetici
String word = null;
if (fileScan.hasNext()) word = fileScan.next();
fileScan.reset(); // reimposta il delimitatore di default (whitespaces)
return word;
}
// salta le prossime skipL linee e poi stampa le successive nL linee e poi
public int printNextLines(int skipL, int nL) { // ritorna il numero di linee
while (skipL > 0 && fileScan.hasNextLine()) { // effettivamente stampate
fileScan.nextLine();
skipL--;
}
int count = 0;
while (count < nL && fileScan.hasNextLine()) {
out.println(fileScan.nextLine());
count++;
}
return count;
}
// stampa le prossime nL linee di testo del file e ritorna il numero di linee
public int printNextLines(int nL) { // effettivamente lette e stampate
return printNextLines(0, nL);
}
// riporta la scansione all'inizio del file
public void rewind() throws FileNotFoundException {
fileScan.close();
fileScan = new Scanner(srcFile);
}
// stampa l'intero file (linea per linea) e ritorna il numero di linee
public int printFile() throws FileNotFoundException {
rewind();
int count = 0;
while (fileScan.hasNextLine()) {
out.println(fileScan.nextLine());
count++;
}
return count;
}
// cerca la parola word nella parte di file non ancora scandita e ritorna
public long find(String word) { // il numero di occorrenze trovate
long count = 0;
while (fileScan.hasNext()) {
String w = fileScan.next();
if (word.equals(w)) count++;
}
return count;
}
// ritorna il numero di linee del file
public int countLines() throws FileNotFoundException {
rewind();
int count = 0;
while (fileScan.hasNextLine()) {
fileScan.nextLine();
count++;
}
return count;
}
// stampa le ultime nL linee del file e ritorna il numero di linee effettivamente
public int printLastLines(int nL) throws FileNotFoundException { // stampate
int nLinee = countLines(); // numero totale linee del file
rewind();
int skipL = (nLinee >= nL ? nLinee - nL : 0); // numero di linee da saltare
while (skipL > 0) { // salta le prime linee
fileScan.nextLine();
skipL--;
}
int count = 0;
while (fileScan.hasNextLine()) { // stampa le ultime nL linee
out.println(fileScan.nextLine());
count++;
}
return count;
}
// chiude la scansione. Dopo la chiusura l'unico metodo che può essere
public void close() { // usato è rewind()
fileScan.close();
fileScan = null;
}
}
Esercizio [Titoli_incorniciati]
import static java.lang.System.*;
public class AlignTitle extends Title {
public static final int LEFT = 0, CENTER = 1, RIGHT = 2;
private int alignment;
private int fieldSize;
public AlignTitle(String t, int align, int field) {
super(t); // invoca il costruttore della classe Title
alignment = align;
fieldSize = field;
}
public void setAlign(int align) { alignment = align; }
public void setField(int size) { fieldSize = size; }
public int printLength() { return fieldSize; } // ridefinisce il metodo di Title
public void print() { // ridefinisce (override) il metodo della classe Title
int dLen = super.printLength(); // invoca il metodo della classe Title
int leftChars = 0, rightChars;
switch (alignment) {
case LEFT: leftChars = 0; break;
case CENTER: leftChars = (fieldSize - dLen)/2; break;
case RIGHT: leftChars = fieldSize - dLen; break;
}
rightChars = fieldSize - dLen - leftChars;
for (int i = 0 ; i < leftChars ; i++) out.print(' ');
super.print(); // invoca il metodo print() della classe Title
for (int i = 0 ; i < rightChars ; i++) out.print(' ');
}
}
/****************** In un file di nome: FrameTitle.java ***********************/
import static java.lang.System.*;
public class FrameTitle extends AlignTitle {
private char frameChar = '*';
public FrameTitle(String t, int align, int field) {
super(t, align, field);
}
public void setFrameChar(char c) { frameChar = c; }
@Override
public void print() {
int len = printLength();
for (int i = 0 ; i < len + 2 ; i++)
out.print(frameChar);
out.println();
out.print(frameChar);
super.print();
out.print(frameChar);
out.println();
for (int i = 0 ; i < len + 2 ; i++)
out.print(frameChar);
out.println();
}
}
This topic: Metod_prog/EO
> WebHome >
MPdiario > SOL010409
Topic revision: r1 - 2009-04-09 - RiccardoSilvestri