Att skriva till och läsa från terminalfönstret

Relevanta dokument
Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Språkkonventioner och redigering av tal.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

JAVAUTVECKLING LEKTION 7

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 14. Filhantering

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

SMD 134 Objektorienterad programmering

Fördjupad Java. Undantagshantering. Fel

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

TENTAMEN OOP

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Objektorienterad programmering i Java

Föreläsnings 9 - Exceptions, I/O

Recitation 4. 2-D arrays. Exceptions

Tentamen FYTA11 Javaprogrammering

DAT043 Objektorienterad Programmering

Föreläsning 3-4 Innehåll

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

F4. programmeringsteknik och Matlab

Tentamen , Introduktion till Java, dtaa98, dtea53

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

OOP Objekt-orienterad programmering

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Tentamen OOP

Objektorienterad Programmering (TDDC77)

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Typkonvertering. Java versus C

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Felhantering. Andra brott mot språkets regler. Man kan också i programmet bryta mot ett antal olika regler som gäller. Exempelvis:

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

PROGRAMMERING-Java Omtentamina

LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Hur ser ett Java-program ut?

1 Comparator & Comparable

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

JAVAUTVECKLING LEKTION 4

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

"if"-satsen. Inledande programmering med C# (1DV402)

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Del A (obligatorisk för alla)

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

TDDC77 Objektorienterad Programmering

1 Programmering i Java. Program element - Introduktion. Exempel. Exempel. Kapitel 3:

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

Tentamen , Grundläggande programmering i Java

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

725G61 - Laboration 4 Interaktion och I/O. Johan Falkenjack

Input. Programmering. Andra källor

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Övning2. Variabler. Data typer

Anteckningar 1: Grundläggande saker

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Skriftlig tentamen för kursen DV017A. Inledande programmering i Java A

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

OOP Objekt-orienterad programmering

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

TENTAMEN OOP

TENTAMEN OOP

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

System.out.println("Jaså du har "+ antaldollar + " stycken.");

Programmering för språkteknologer I, VT2012. Rum

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

TDDC77 Objektorienterad Programmering

Instuderingsfrågor, del D

Transkript:

Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen när man vill kunna göra utskrifter i terminalfönstret och läsa in uppgifter från användaren genom tangentbordet. Att skriva till När du skrev programmet HelloWorld använde du objektet System.out och anropade metoden println( ) på det objektet. System.out.println ( Hello World! ) ; Om du istället vill skriva ut en sträng skickar du in den som parameter till metoden: String minstrang = new String ( Hello Pelle! ) ; System.out.println ( minstrang ) ; Man kan skriva ut flera olika strängar tillsammans genom att skriva plustecken (+) mellan varje enskild sträng. System.out.println ( minstrang + dinstrang + Hej då! ) ; Med metoden println( ) läggs en radbrytning automatiskt till. Om du vill skriva ut utan att samtidigt få med radbrytningen kan du istället anropa metoden print( ) System.out.print ( minstrang ) ; och läsa från För att läsa från tangentbordet används flera objekt, bl.a. objektet System.in. Nedan ges ett exempel på att läsa in en hel rad från tangentbordet med metoden readline( ) ( en hel rad innebär tills ett radbrytningstecken hittas. Mellanslag kan alltså också läsas in med detta metodanrop. ) Eftersom att flera objekt är inblandade och koden för att läsa in blir lång brukar man deklarera rad 8 en gång för att sedan anropa metoden readline( ) på samma objekt varje gång man vill läsa in något från tangentbordet.

//Exempel 1 1. import java.io.* 2. public class NameReader 3. { 4. public static void ( String[ ] args ) throws IOException 5. { 6. String name ; 7. 8. BufferedReader in = new BufferedReader ( new InputStreamReader( System.in ) ) ; 9. 10. System.out.print ( What is your name? ); 11. 12. name = in.readline(); 13. 14. System.out.println( Hello + name); 15. } 16. } På rad 6 deklareras strängen name, ett objekt av typen String som kommer att användas för att lagra texten som vi läser in från tangentbordet. På rad 12 läser vi från tangentbordet med ett anrop till metoden readline( ) i objektet in. Den inlästa textsträngen (inklusive mellanslag, om sådana finns) tilldelas name. På rad 14 skriver vi ut texten som lästes in direkt efter en annan textsträng. Plustecknet (+) sätter samman flera textsträngar. Observera att på rad 4, direkt efter metodhuvudet, har jag skrivit throws IOException. Läs mer om undantag och hur du hanterar dessa nedan. att läsa in heltal För att läsa in heltal krävs det att man omvandlar strängen som man läser in med BufferedReader till en int. Detta kan göras med hjälp av metoden parseint() i klassen Integer. Eftersom att metoden parseint är en statisk metod behöver du inte skapa något objekt av Integer för att använda metoden. Det räcker med att skriva klassnamnet framför metodanropet. Se exemplet nedan.

//Exempel 2 1. import java.io.*; 2. class lasafrantgb{ 3. public static void main(string [] args) throws IOException { 4. int tal = 0; 5. boolean lastal = true; 6. BufferedReader in=new BufferedReader (new InputStreamReader(System.in)); 7. System.out.print("ange ett tal: "); 8. while( lastal ) { 9. String s=in.readline(); 10. try { 11. tal=integer.parseint(s); 12. lastal = false; 13. } catch (NumberFormatException e) { 14. System.out.print ( "Det var fel! Ange ett tal: "); 15. } 16. } 17. System.out.println("talet var "+tal); 18. } 19. } Om du går in i Javas API och tittar på metoden parseint (se även textrutan nedan) ser du att den kommer att kasta ett undantag om texten som inte skrevs in var ett heltal. Genom att fånga undantaget (på rad 13) och göra en felutskrift (rad 14) kan du uppmana användaren att hålla sig till heltal i fortsättningen. While-loopen använder en primitiv typ boolean för att fortsätta be om ett heltal. Variabeln lastal kommer att få värdet false om ett undantag inte kastas (annars går exekveringen förbi den raden, ner till catch på rad 13) och loopen avbryts. Om vi inte tilldelar tal=0 i början av programmet kommer kompileringen varna för att variablen kanske inte är initierad när den används på rad 17. Läs mer om hur du fångar undantag i stycket nedan.

parseint public static int parseint(string s) throws NumberFormatException Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002d') to indicate a negative value. The resulting integer value is returned, exactly as if the argument and the radix 10 were given as arguments to the parseint(java.lang.string, int) method. Parameters: s - a String containing the int representation to be parsed Returns: the integer value represented by the argument in decimal. Throws: NumberFormatException - if the string does not contain a parsable integer. Undantag Metoden readline( ) kastar ett undantag av typen IOException om något går fel vid läsning från tangentbordet. Om du anropar en metod som kastar ett undantag måste du hantera det på något sätt. Ett sätt är att fånga undantaget och försöka åtgärda problemet som orsakade det. Ett annat sätt är att deklarera att er egen metod kastar undantaget vidare. Om du inte gör någonting får du ett felmeddelande under kompileringen: NameReader.java:13: unreported exception java.io.ioexception; must be caught or declared to be thrown name = in.readline(); 1 error Men hur vet du att en viss metod kastar undantag? Och hur vet du vilken typ som kastas? Titta på dokumentationen för readline i Java API (klicka er dit via java.io/bufferedreader/ readline)

readline public String readline() throws IOException Read a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed. Returns: A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached Throws: IOException - If an I/O error occurs Som du ser har metoden samma slags deklaration av undantag som jag skrev i exemplet ovan. När du anropar en metod kan du se i Java API om metoden kastar ett undantag och också vilken typ av undantag den kastar (IOException är ett objekt, precis som, nästan, allting annat i Java och därmed också av en viss typ.) Jämför gärna med andra metoder i Java API. I Exempel 1 deklarerar vi att vår metod kan komma att kasta ett undantag. Deklarationen sker i metodhuvudet på rad 4. Om ett undantag kastas kommer detta att fångas upp av systemet som avbryter programmet. I Exempel 2 fångar vi undantaget som eventuellt kastas. Undantaget kastas av metoden parseint på rad 11 och fångas av catch-satsen på rad 17. All eventuell kod som finns efter metoden och innan catch-satsen kommer inte att exekveras. Det innebär att den boolska variabeln lastal inte kommer att ändra värde till false om undantaget kastas. När felmeddelandet i catch-satsen har skrivits ut kommer koden att fortsätta exekvera efter catchsatsen och loopen kommer att fortsätta och läser in användarens val. Kompilera och prova programmet själv. Vi kommer att diskutera undantagshantering mer i senare moduler.