package tiedosto; import java.util.*; import java.io.*; import fi.jyu.mit.ohj2.Mjonot; /** * Lukujen lukeminen tiedostosta iteraattorilla ScannerF-luokkaa k�ytt�en * Vikana se, ett� ei voi iteroida kahta kertaa. * @author Vesa Lappalainen * @version 1.0, 05.03.2007 */ @SuppressWarnings("javadoc") public class TiedKaScannerI { public static class ScannerF implements Iterable<String>, Closeable { private Scanner scanner; @SuppressWarnings("resource") public ScannerF(String filename) throws FileNotFoundException { scanner = new Scanner(new FileInputStream(new File(filename))); } @Override public Iterator<String> iterator() { return scanner; } @Override public void close() { scanner.close(); } } @SuppressWarnings("resource") public static void main(String[] args) { ScannerF fi; try { // Avataan tiedosto lukemista varten fi = new ScannerF("luvut.dat"); } catch (FileNotFoundException ex) { System.err.println("Tiedosto ei aukea! " + ex.getMessage()); return; } double summa = 0; int n = 0; try { double luku; for (String s : fi) { try { luku = Double.parseDouble(s); summa += luku; n++; } catch (NumberFormatException ex) { // hyl�t��n } } } finally { fi.close(); } double ka = 0; if (n > 0) ka = summa / n; System.out.println("Lukuja oli " + n + " kappaletta."); System.out.println("Niiden summa oli " + Mjonot.fmt(summa, 4, 2)); System.out.println("ja keskiarvo oli " + Mjonot.fmt(ka, 4, 2)); } }