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();
    }
}
Topic revision: r1 - 2009-04-09 - RiccardoSilvestri






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback