Översikt Repetition for-loopar Skriva till och läsa från filer Strömmar Eclipse Hur anpassa till vad du gillar? Skriva och läsa data Institutionen för datavetenskap Programmering 1 Rita Kovordányi 2 Kontrollflöde Var programmet tar vägen i koden Påverkas av t.ex. If-satser For-loopar ar Två sorters loopar For-loop För ett givet antal gånger: gör följande Måste veta rätt antal från början Medan testet är sant: gör följande Mer dynamiskt Kan inte i förväg säga hur många gånger loopen kommer att köras Programmering 1 Rita Kovordányi 3 Programmering 1 Rita Kovordányi 4 For-loop public class ForLoop1 { For-loop public class ForLoop1 { int[] rain = {6, 4, 7, 2, 3, 1, 0; int[] rain = {6, 4, 7, 2, 3, 1, 0; for ( i < 7; i++) { initiering för dessa värden steg for ( i < rain.length; i++) { Programmering 1 Rita Kovordányi 5 Programmering 1 Rita Kovordányi 6
Nästlade for-loop public class ForLoop1 { int[][] rain = { { 6, 4, 7, 2, 3, 1, 0, { 4, 6, 3, 2, 1, 8, 9 ; for ( i < 2; i++) { for (int j = 0; j < 7; j++) { sum = sum + rain[i][j]; Programmering 1 Rita Kovordányi 7 Kontrollflöde för while-loop public class WhileLoop1 { int[] rain = { 1, 3, 7, 12, 4 ; Programmering 1 Rita Kovordányi 9 A i = 0 sum = 0 i < 5 sum = sum + rain[i] i = i++ B Programmering 1 Rita Kovordányi 10 public class WhileLoop1 { public class WhileLoop1 { int[] rain = MyLib.getData(); int[] rain = MyLib.getData(); Tänk alltid på vad som kommer att hända double mean = sum/i; om loopen aldrig körs System.out.println(mean); Programmering 1 Rita Kovordányi 11 Defensiv programmering if (i!= 0) { double mean = sum/i; System.out.println(mean); Programmering 1 Rita Kovordányi 12
Nästlade while-loop public class WhileLoopBreak { int[] rain = { 1, 3, 7, 12, 4 ; int record = 10; if (sum > record) { break; avbryt loopen Programmering 1 Rita Kovordányi 13 int[][] rain = { { 1, 3, 7, 12, 4, { 3, 4, 2, 6, 1 ; int j = 0; while (i < 2) { while (j < 5) { sum = sum + rain[i][j]; j++; Hmm?? Programmering 1 Rita Kovordányi 14 Nästlade while-loop int[][] rain = { { 1, 3, 7, 12, 4, { 3, 4, 2, 6, 1 ; int j = 0; while (i < 2) { j = 0; while (j < 5) { sum = sum + rain[i][j]; j++; Nu ska det nog funka! Skriva till och läsa från filer Programmering 1 Rita Kovordányi 15 Unika kommunikationskanaler Vi behöver en dedicerad kommunikationskanal som är knuten till den specifika filen vi vill arbeta med Klass och objekt (instanser av klassen) Klass: Hus, Djur, BankKonto, Pingvin Objekt: mitthus, annashus ludde pettersonskonto Mitt specifika hus Programmering 1 Rita Kovordányi 17 Programmering 1 Rita Kovordányi 18
Objekt (instanser) Skapa ett eget hus Objekt skapas utifrån den mall som finns i klassen House myhouse = new House(2); Vi har nu ett eget hus med 2 våningar Allt vi gör kommer att ha med detta hus att göra (inte med Hus i allmänhet) myhouse.paint( red ); Programmering 1 Rita Kovordányi 19 Programmering 1 Rita Kovordányi 20 Strömmar Kommunikationskanaler Gemensam beteckning Döljer olikheterna mellan olika input/output-enheter (IO-enheter) Dvs. olika enheter ska kunna skrivas och läsas på samma sätt IO-enheter Terminalen ( console ) Filer Biblioteket java.io Sockets Biblioteket java.net Programmering 1 Rita Kovordányi 21 Programmering 1 Rita Kovordányi 22 IO-data som ska skrivas/läsas Läsa från en binär-fil Binära data (8 bitar).exe-filer Ljud Bild Textfiler (16 bitar) Html XML Skrives/läses via strömmar Behöver dessutom readers och writers ström Programmering 1 Rita Kovordányi 23 Programmering 1 Rita Kovordányi 24
Läsa från en text-fil Läsa från URL ström reader URL url = new URL("http://..."); InputStream instr = url.openstream(); InputStreamReader ireader = new InputStreamReader(instr); BufferedReader reader = new BufferedReader(instrReader); String line = reader.readline(); while (line!= null) { alllines = alllines + line; line = reader.readline(); catch (MalformedURLException e) { catch (IOException e) { Programmering 1 Rita Kovordányi 25 Programmering 1 Rita Kovordányi 26 Skriva till URL URL url = new URL("http://..."); URLConnection connection = url.openconnection(); connection.setdooutput(true); OutputStream ostr = connection.getoutputstream(); OutputStreamWriter out = new OutputStreamWriter(ostr); out.write("hej!"); out.close(); catch (MalformedURLException e) { catch (IOException e) { Måste vara beredd på fel som kan uppstå Fel utanför ens kontroll T.ex. strömmen bryts mitt under fil-läsning Filen finns inte längre (har raderats) Minnet tar slut Programmering 1 Rita Kovordányi 27 Programmering 1 Rita Kovordányi 28 Hantera fel public class ErrHandling1 { Innehåller all information... läs data... om felet catch (Exception e) { System.out.println( Fel har uppstått ); e.printstacktrace(); Visar bl.a. anropskedjan Läs från terminalen ( console ) InputStreamReader inreader = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(inReader); String line = reader.readline(); if(line!= null) { //... catch (IOException e) { Programmering 1 Rita Kovordányi 29 Programmering 1 Rita Kovordányi 30
Läsa från textfil Skriva till textfil String alllines = ""; FileReader myfilereader = new FileReader( filnamn"); BufferedReader reader = new BufferedReader(myFileReader); String line = reader.readline(); while(line!= null) { alllines = alllines + line + "\n\r"; line = reader.readline(); catch (FileNotFoundException e) { catch (IOException e) { FileWriter fwriter = new FileWriter( filnamn"); PrintWriter writer = new PrintWriter(fWriter); writer.println("hej!"); writer.flush(); // kör ut från interna bufferten writer.close(); catch (IOException e) { Programmering 1 Rita Kovordányi 31 Programmering 1 Rita Kovordányi 32 Tips Eclipse-tricks Använd Debug-perspective för att söka fel i din kod För att fånga upp fel som kan uppstå under körning (t.ex. vid inmatning/utskrift) Skriv din kod Source Surround with Try-Catch block För att få hjälp med småfel på programmet Ctrl-1 (Dvs. tryck ner Control tillsammans med etta ) Navigera bland förslagen med piltangenterna, sedan Enter Programmering 1 Rita Kovordányi 34 Skapa egen Javadoc Skapa egen Javadoc Välj Project Generate Javadoc Notera att Eclipse (till skillnad från t.ex. Netbeans) inte kan hitta bland dina Java-SDK filer Du måste hjälpa den att hitta rätt kommando (rätt.exe-fil) Kilcka på Configure och hitta platsen där javadoc.exe finns Programmering 1 Rita Kovordányi 35