För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.



Relevanta dokument
Lektion 1, del b Utskrifter av variabelvärden Inläsning av värden till variabler

TDDC77 Objektorienterad Programmering

Tentamen OOP

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

OOP Objekt-orienterad programmering

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

( ostream ) << ( annan datatyp ) : ostream

Chapter 3: Using Classes and Objects

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Programmeringsteknik med C och Matlab

Föreläsning 1 & 2 INTRODUKTION

Övningar Dag 2 En första klass

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Programmering A. Johan Eliasson

4.4 Swing ett interaktivt grafiskt gränssnitt

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

Objektorienterad programmering i Java

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

1 Funktioner och procedurell abstraktion

SMD 134 Objektorienterad programmering

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

Föreläsning 4: Poster

OOP Objekt-orienterad programmering

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

Föreläsning 4. Klasser och objekt

Redovisning av inlämningsuppgifter

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

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

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.

OOP Objekt-orienterad programmering

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

JAVAUTVECKLING LEKTION 7

OOP Objekt-orienterad programmering

1 Egna klasser. 1.1 En punkt-klass

Föreläsning 5. Föreläsning 5. Klasser och objekt. Klasser och objekt. Klasser och objekt

Tentamen , Introduktion till Java, dtaa98, dtea53

JAVA Mer om klasser och objektorientering

int iarray[]= new int[3]; // deklarera ett heltalsfält med tre heltal int jarray[]={ 1, 3, 5, 7, 9, 11, 13, 15}; // initierat fält 8 element

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

Objektorienterad programmering D2

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Björn Abelli Programmeringens grunder med exempel i C#

F4. programmeringsteknik och Matlab

Tentamen. Grundläggande programmering i Java A 5p, DTAA

8-1 Formler och uttryck. Namn:.

Laboration: Att inhägna ett rektangulärt område

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

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Tentamen , Grundläggande programmering i Java

Sätt att skriva ut binärträd

Kort om klasser och objekt En introduktion till GUI-programmering i Java

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Föreläsning 10. ADT:er och datastrukturer

OOP Tentamen

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

OOP Objekt-orienterad programmering

Objektsamlingar i Java

Textsträngar från/till skärm eller fil

TENTAMEN OOP

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Grunderna i SQL del 1

Iteration while-satsen

Föreläsning 3. Iteration while-satsen

Föreläsning 2, vecka 8: Repetition

Hur ser ett Java-program ut?

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

PROGRAMMERING-Java TENTAMINA

5 Grundläggande in- och utmatning

OOP Objekt-orienterad programmering

Malmö högskola 2008/2009 CTS

Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.

Föreläsningsmaterial (Syntax och variabler)

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Tentamen i Objektorienterad programmering

Klasser och objekt. Henrik Johansson. August 20, 2008

Hjälpmedel för kompilatorkonstruktion, DVB004

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

Lösningsförslag: Instuderingsfrågor, del A

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Skizz till en enkel databas

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Primitiva datatyper och selektering

(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

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Objektorienterad programmering i Java

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

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

Transkript:

1 Inmatning och utskrift Inmatning från tangentbord och utskrift till skärm sker i java med hjälp av objekten System.out och System.in. Dessa båda objekt är exempel på strömmar. En ström är en typ som kan läsa och skriva data mellan en sändare och en mottagare. Finessen med strömmar är att Vi har tidigare sett exempel på utskrift. Vi kommer i det här avsnittet även ta upp inmatning från tangentbordet så att vi kan skapa program som kommunicerar med en användare istället för att använda värden inskrivna i programkoden. 1.1 Utskrift till skärm För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print. System.out.println("Hello"); 1.1.1 Typen String Metoden println tar ett argument av typen String, texttypen (Den kan även ta enstaka värden av andra typer och omvandla dessa till string). Då man slår ihop, konkatenerar, strängar med andra typer måste man vara försiktig System.out.println( 3 + 6 + "Hello"); Vad ska skrivas ut, "36Hello" eller "9Hello"? Det som skrivs ut är "9Hello" eftersom man utvärderar det sammansatta uttrycket från vänster till höger. Uttrycket (int)+(string) omvandlas automatiskt till ett String resultat. Detsamma gäller för andra taltyper. System.out.println("Hello" + 3 + 6); Vad blir resultatet av detta? Testa genom att foga in satsen i main.. Blev det det du förväntade dig? 1.2 Inmatning från tangentbordet Inmatning görs med objektet System.in. Objektet är till för att läsa textrader. Eftersom man ofta vill läsa in andra värden än just hela rader av text finns en hjälpklass döpt Scanner för att underlätta inmatning av heltal, flyttal osv. För att ta emot inmatning av ett heltal från tangentbordet kan man skriva: Scanner tgb = new Scanner( System.in ); Detta är första gången då vi haft en anleding att skapa ett objekt. Uttrycket new Scanner( System.in ); innbär att vi skapar ett objekt, eller en instans, av typen Scanner. Scanner är en klass som beskriver metoder att läsa värden från en ström eller annan datakälla. Datakällan vi angivit är System.in som representerar tangentbordet. Terminologi: Konstruerare. new Scanner beskriver en konstruktion av en Scanner-instans, vi anropar en konstruerare hos Scanner. Exempel:

import java.util.*; Scanner tgb = new Scanner(System.in); System.out.println("Hur många endollarmynt har du?"); int antaldollar; antaldollar = tgb.nextint(); System.out.println("Jaså du har "+ antaldollar + " stycken."); Glömmer man att lägga till ledtext till inmatningen, eller kanske rentav råkar lägga den efter inmatningen, kommer programmet att vänta på en inmatning från användaren, och användaren kommer i sin tur att inte ha en aning om att programmet väntar tålmodigt på en inmatning. 1.2.1 Klasser och objekt Vi utnyttjar klassen Scanner för att skapa objektet tgb. Vi utnyttjar sedan objektet med hjälp av medlemsväljaren. (punkt). Ett objekt har metoder och attribut dessa båda kallas sammantaget för objektets medlemmar. Tumregeln är att man använder metoder för att använda objektet. Metoderna använder (det ser vi inte) i sin tur attributen för att utföra sin uppgift. Man kan här tänka sig hur Scanner utnyttjar System.in för att läsa från tangentbordet. Det som sker bakom kulisserna är: tgb.nextint() => läs siffertecken från System.in tills man stöter på ett mellanslag. Omvandla detta till typen int. Ge tillbaka int-värdet. Om vi vänder blicken mot den nu välbekanta satsen System.out.println ser vi att det finns två medlemsväljare. Vi kan läsa ut det som att out är en medlem av System (ett attribut), och println är en medlem av out (en metod). Programmet ovan kan ge resultatet Hur många endollarmynt har du? 7 Jaså du har 7 stycken 1.2.2 Paket Den första satsen i föregående exempel är import java.util.*; Alla klasser i javabiblioteket är uppdelade i paket, för att man enklare ska hitta dom. Om man vill använda någon annan klass än de mest basala, såsom System och String, måste man importera det paket som innehåller klassen ifråga. Scannerklassen ligger i ett paket som heter java.util och satsen import java.util.*; innebär läs in alla klasser ifrån paketet java.util. * är ett sk wildcard, och anger alltså alla klasser i paketet. Alternativt kan vi skriva

import java.util.scanner; för att bara importera just Scanner-klassen. Vilket skrivsätt vi väljer är för närvarande en smaksak. Vid större projekt och nätbaserade applikationer kan skrivsättet komma påverka applikationen, men för vårt vidkommande är det en smaksak. 1.2.3 Exempelprogram Beräkna area och omkrets hos en rektangel. En viktig komponent att skapa ett eget program utfrån en beskrivning är att först tänka sig, göra en modell, hur programmet bör fungera. Man kan till exempel tänka sig att programmet fungerar som Ange bredd: 4 Ange höjd: 2,5 Arean är 10.0, omkretsen är 13.0 Nu kan man se i vilken ordning man vill sätta ihop programsatserna import java.util.*; double bredd, höjd; Scanner tgb = new Scanner(System.in); System.out.println("Ange bredd?"); bredd = tgb.nextdouble(); System.out.println("Ange höjd?"); höjd = tgb.nextdouble(); double omkrets = 2*bredd + 2*höjd; double area = bredd* höjd; System.out.println("Arean är "+area+" omkretsen är "+bredd); 1.2.4 Övning: Skriv ett program som frågar efter hur gammal du är, och därefter berättar hur många dagar du levat. Dela upp lösningen i olika steg. Börja med att fundera på hur du vill att beräkningen ska gå till. Då du vet hur du vill att beräkningen ska fungera tänker du ut hur användardialogen (programkörningen med in och utmatningar) ska se ut. Därefter kan du börja skriva programmet genom att titta på tidigare exempel. Tänk särskilt på vilka variabler du behöver och vilka datatyper dessa variabler bör ha.

2 Mer om operatorer 2.1 Utvärderingsregler Betrakta satsen omkrets = 2*bredd + 2*höjd; Om bredden är 4 och höjden är 2.5 så vill vi att uträkningen ska utföras som 1: 2*4 =8 2: 2*2.5 =5 Därefter 3: (1:+2: ) 8 + 5 = 13 Därefter 4: omkrets = 13 För att åstakomma detta finns 2 parametrar som bestämmer i vilken ordning operatorerna utvärderas 1- Operatorprioritet 2- Utvärderingsriktning Operatorn * har högst prioritet av de inblandade operatorerna och utvärderas därför först, 1: och 2:. Därefter kommer + i prioritetsordning, 3:. Sist kommer =, tilldelningsoperatorn 4:. Utvärderingsriktning är från vänster till höger, alltså den riktning man normalt läser, för alla operatorer utom tilldelningsoperatorerna, som utvärderas från höger till vänster. Utvärderingsriktningen ger att 1: utförs före 2: Att tilldelningsoperatorn har utvärderingsriktning höger till vänster gör att man kan göra sammansatta tilldelningar såsom int i, j; i = j = 5; 1: j = 5, resultatet av denna operation är j, dvs heltalet 5 2: i = j eller om man så vill i = 5 2.2 Exempel Sammansatta satser behöver man lite träning för att tolka på ett riktigt sätt; också naturligtvis för att kunna skriva dem själv. Om en beräkning blir för komplex, delar man gärna upp den på flera mindre delar. double omkrets = 2*bredd + 2*höjd; // kan skrivas om som double omkrets = 2*( bredd + höjd ); // radien av en cirkel int diameter = 3; double radie = (double)diameter / 2; // (double) omvandlar typ på diameter double area = radie*radie* 3.14; // x upphöjt i 2 skrivs som x*x

// ytan på en hel cylinder double radie = 2.0; double höjd = 4.0; double cylinderyta = 2*radie*radie*3.14159 + höjd*radie*2*3.14159; // En så pass komplex sats delar man gärna upp double radie = 2.0; double höjd = 4.0; double sidyta = höjd* radie*2*3.14159; double toppyta = radie*radie*3.14159; double cylinderyta = sidyta + 2*toppYta; Operator Precedence postfix operators expr++ expr-- unary operators ++expr --expr +expr -expr ~! multiplicative * / % additive + - shift << >> >>> relational < > <= >= instanceof equality ==!= bitwise AND bitwise exclusive OR & ^ bitwise inclusive OR logical AND && logical OR conditional? : assignment = += -= *= /= %= &= ^= = <<= >>= >>>= Källa: java.sun.com

3 Alternativ till konsollinmatning Det finns mycket hjälp att få i javas klassbibliotek om man vill skriva en grafisk applikation. För in och utmatningar kan vi enkelt få hjälp av klassen JOptionPane som är en klass som innehåller metoder för att visa olika enkla typer av dialogrutor. Om vi drar oss till minnes det första inmatningsexemplet import java.util.*; Scanner tgb = new Scanner(System.in); System.out.println("Hur många endollarmynt har du?"); int antaldollar; antaldollar = tgb.nextint(); System.out.println("Jaså du har "+ antaldollar + " stycken."); Kan det skrivas om till att använda JOptionPane och dialogrutor som import javax.swing.*; String inmatning = JOptionPane.showInputDialog("Hur många dollar har du?"); double dollars; dollars = Double.parseDouble( inmatning ); JOptionPane.showMessageDialog( null, "Jaså du har $"+ dollars ); Radbrytningarna på rad 7 och 13 är gjorda för läsbarhetens skull. JOptionPane befinner sig i grafikpaketet javax.swing och därför ser import-satsen ut som den gör. Inläsningen sker med JOptionPanes medlem showinputdialog som returnerar en text, String. Inmatningen som görs i dialogrutan ges alltså tillbaka på textform. Vi har här ingen möjlighet att direkt läsa in talvärden utan är tvungen att läsa in en text, som vi sedan omvandlar till ett tal. Double är en hjälpklass till den primitiva taltypen double. Double förser oss med hjälpmetoder för att arbeta med tal av typen double, bland annat metoden parsedouble( String s ) som omvandlar strängen s till double. Samtliga enkla typer har en motsvarande komplementerande klass, double-double, int-integer, byte- Byte, char-character osv. För att sedan presentera resultaten används showmessagedialog( null, String s); Uttrycket null betyder inget objekt. showmessagedialog förväntar sig att ett "föräldrafönster" ska äga dialogrutan, men eftersom vi inte har något föräldrafönster anger vi istället null. Texten s är förstås den text som ska visas i dialogrutan.