Input. Programmering. Andra källor



Relevanta dokument
Funktioner. Programmering. Egendefinierade funktioner i Java. En Java-funktions anatomi. hh.se/db2004. Statiska metoder. Funktioner. resultatvärde.

Föreläsning 4: for, while, do-while

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Roboten Karel lär sig Java

PROV. 10 Uppräknade datatyper

Föreläsning 5 Mer om funktioner, villkor

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Uppgradera till ArcGIS for Desktop 10.3

Laboration 12, Arrayer

Bg Autogiro. November Medgivande via Hemsida

Så surfar du säkrare 2 Skydda surfvanor på din dator 2 Skydda det du skickar 4 Skydda din identitet 4

Anmälan om att du har fått ett säkert e-postmeddelande

Hur använder jag CropSAT.se?

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Snabbguide: Användning av filsamling / resources i Mondo

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 3

Heltal(int) Programmeringsteknik 54

Cecilia Ingard. Boksidan

Introduktion... 3 Nya funktioner i

Näsgård Mobile TID Manual senast ändrad Näsgård Mobile TID. Inloggning

E-faktura i ADJob 4.3

årskurs F-3 Berättelsen tar sin början.

Vad är Internet och vem bryr sig? Katarina Lycken Rüter på uppdrag av Webbstjärnan

KDiff3 är ett verktyg för jämförelser och sammanfogning av filer och kataloger, som

Att svara på en remiss

Läsa in och modellera data. Qlik Sense Copyright QlikTech International AB. Alla rättigheter förbehållna.

Rådgivning inom livsmedelskontrollen

Transkript:

Programmering hh.se/db2004 Föreläsning 13: Undantag - med exempel från input klassen Scanner Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Input Standard Input Med standard input kan programmet läsa in data från tangentbordet. Och vi kan dirigera om standard input från en fil med hjälp av operativsystemet. Mål Läsa från flera indataströmmar: från standard input, från en fil, från en webbplats, från nätverket, med mera. Scanner En datatyp Scanner som kan användas för att läsa in data från olika källor. Center for Research on Embedded Systems IDE-sektionen 1 / 18 Ett enkelt exempel Har två textfiler samma innehåll? 2 / 18 Att jämföra filer import java.io.file; public class Cmp{ private static String readall(scanner in){ String all = ""; while(in.hasnextline()){ all = all + in.nextline(); return all; Scanner in0 = new Scanner(new File(cmdLn[0])); Scanner in1 = new Scanner(new File(cmdLn[1])); System.out.println(readAll(in0).equals(readAll(in1))); 3 / 18 Andra källor Man kan faktiskt skapa instanser av Scanner för att läsa in från olika källor: Från en InputStream: Scanner in = new Scanner(System.in); Från en fil: Scanner in = new Scanner(new File("data.txt"); Från en sträng: Scanner in = new Scanner("1.57 3.2356-1.2"); Användning Enklaste användning: Indata delas upp i ord åtskilda av blanktecken och radbyten. Man kan testa om fler ord finns, om nästa ord kan ses som int, double, osv och i så fall läsa och konvertera ordet. 4 / 18

Mera om Scanner Delar av APIn public class java.util.scanner Scanner(String s) Scanner(File f) Scanner(InputStream in) boolean hasnext() boolean hasnextline() boolean hasnextint() boolean hasnextdouble() String next() String nextline() int nextint() double nextdouble() Ett exempel public class Stats { public static double average(scanner in) { double sum = 0; int count = 0; while (in.hasnextdouble()) { sum = sum + in.nextdouble(); count++; return sum/count; 5 / 18 6 / 18 Två klientprogram Exekveringsfel public class Client1 { Scanner in = new Scanner("12 3.5 9.4 6.7"); System.out.println("Average: " + avg); public class Client2 { Scanner in = new Scanner(System.in); 7 / 18 Vissa fel under körning av ett program upptäcks av java, som kastar ett undantag (eng. throws an exception). Programmet avbryts och ett felmeddelande skrivs ut. Det finns många olika varianter: När programmet försöker göra om en String till en int och ordet inte kan ses som ett tal! När programmet försöker komma åt ett fält på en position som inte finns för fältet. När programmet försöker dela med 0. När programmet försöker öppna en fil som inte finns. 8 / 18

NullPointerException public class Undantag{ private int n; private String s; public Undantag(){ n = s.length(); Undantag u = new Undantag(); stray.hh.se% java Undantag Exception in thread "main" java.lang.nullpointerexception at Undantag.<init>(Undantag.java:5) at Undantag.main(Undantag.java:11) 9 / 18 NumberFormatException int n = Integer.parseInt(cmdLn[0]); stray.hh.se% java Undantag www Exception in thread "main" java.lang.numberformatexception: For input string: "www" at java.lang.numberformatexception.forinputstring( NumberFormatException.java:48) at java.lang.integer.parseint(integer.java:449) at java.lang.integer.parseint(integer.java:499) at Undantag.main(Undantag.java:3) 10 / 18 ArrayIndexOutOfBoundsException int n = Integer.parseInt(cmdLn[0]); int[] a = new int[n]; for(int i = 0; i<=a.length;i++){ a[i]=i; stray.hh.se% java Undantag 3 Exception in thread "main" java.lang.arrayindexoutofboundsexception: 3 at Undantag.main(Undantag.java:5) 11 / 18 Ytterligare en klient för Stats import java.io.file; Kompileringsfel! programs > javac Client3.java Client3.java:5: unreported exception java.io.filenotfoundexception; must be caught or declared to be thrown ^ 12 / 18

Korrigerade versionen Fångar undantaget import java.io.*; try { catch (FileNotFoundException e) { System.out.println(e.getMessage()); System.exit(0); Att läsa från URLs 13 / 18 Korrigerade versionen Kastar undantaget vidare import java.io.*; public static void main(string[] args) throws java.io.filenotfoundexception{ Att läsa från URLs 14 / 18 Web servers och html-filer Vi vill komma åt data som annars presenteras av webbläsare. Dessa data genereras i webbservrar i form av formatterad text och man kan komma åt dem via deras adress (URL). I Java finns stöd för att använda samma protokoll (http) som webbservrar använder. Då kan java-program ta emot text från en URL. En scanner från en URL private static Scanner scanner(string urlname) throws java.net.malformedurlexception, java.io.ioexception{ URL url = new URL(urlName); URLConnection site = url.openconnection(); InputStream is = site.getinputstream(); Scanner scanner = new Scanner(new BufferedInputStream(is)); return scanner; 15 / 18 16 / 18

HTML Den formatterade texten Hos http://finance.yahoo.com/q?s=goog kan man få <th scope="row" width="48%"> Last Trade: </th> <td class="yfnc tabledata1"> <big> <b> <span id="yfs l10 goog">544.72</span> </b> </big> </td> Och då kan man filtrera det intressanta som finns inom <span> 17 / 18 Stocks try{ Scanner scanner = scanner("http://finance.yahoo.com/q?s=goog")); String input = readall(scanner); int start = input.indexof("last Trade:", 0); int from = input.indexof("span id=\"yfs_l10_goog\">"); int to = input.indexof("</span>", from); System.out.println(input.substring(from + 23, to)); catch(java.net.malformedurlexception e) {System.out.println("malformed URL"); catch(java.io.ioexception e) {System.out.println("Could not open"); 18 / 18