Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer



Relevanta dokument
Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Omdirigering. Omdirigering

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

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

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

SMD 134 Objektorienterad programmering

Undervisning. Examination

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

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

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

(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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Objektorienterad Programmering (TDDC77)

Programmering A. Johan Eliasson

Undervisning. Examination

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

Tentamen , Introduktion till Java, dtaa98, dtea53

TDDC77 Objektorienterad Programmering

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

OOP Objekt-orienterad programmering

TDDC77 Objektorienterad Programmering

Parameteröverföring. Exempel. Exempel. Metodkropp

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Input. Programmering. Andra källor

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

Föreläsning 1 & 2 INTRODUKTION

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

Övning2. Variabler. Data typer

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Programmering för språkteknologer II, HT2011. Rum

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Föreläsning 6: Metoder och fält (arrays)

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

Objektorienterad programmering Föreläsning 4

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

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

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

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

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

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

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

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

Typkonvertering. Java versus C

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

Föreläsning 3: Booleans, if, switch

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

F4. programmeringsteknik och Matlab

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.

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Att utvidga klasser. Programmering. Att utvidga klasser. Förvirring. hh.se/db2004

Föreläsning 1 & 2 INTRODUKTION

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Föreläsning 3-4 Innehåll

OOP Objekt-orienterad programmering

Föreläsning REPETITION & EXTENTA

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

TDIU01 - Programmering i C++, grundkurs

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

Anteckningar 1: Grundläggande saker

Föreläsningsmaterial (Syntax och variabler)

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

TDIU01 - Programmering i C++, grundkurs

Användarhandledning Version 1.2

D0010E. Hello world! Nedräkning. Sågtand. Övningsuppgifter i Eclipse. Skapa ett program som skriver ut "Hello world" på skärmen.

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Daniel Petersson (Labassistent) Examination. 1 Skriftlig tentamen (betyg)

Tentamen OOP

Tentamen , Grundläggande programmering i Java

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

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

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

Programmering. hh.se/db2004. SuperKarel, Nedbrytning & Styrsatser. Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering

Föreläsning 2, vecka 8: Repetition

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

JAVA Mer om klasser och objektorientering

Iteration while-satsen

Laboration 1. Utgåva 1 Gäller från

TDDC77 Objektorienterad Programmering

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

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

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

Lite logik. Kap 6: Sid 2

Instuderingsfrågor, del D

LÖSNINGSFÖRSLAG TENTAMEN

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Tentamen. Lösningsförslag

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

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

725G61 - Laboration 1 Variabler och villkorssatser. Johan Falkenjack

PROGRAMMERING-Java TENTAMINA

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

Transkript:

Programmering hh.se/db2004 Föreläsning 3: Java. Grundtyper, variabler och arrayer Hej Då, Karel! Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Center for Research on Embedded Systems IDE-sektionen Vårt första Javaprogram Vårt första Javaprogram Anatomin Precis som med Karel, programmerar vi genom att definiera en ny klass. Men den behöver inte utvidga Karel! Det finns en klass i Java som alla program utvidgar och man behöver därför inte ange det i headern. Anatomin Motsvarande run() hos Karel finns det main(string[] cmdln) i Java: det är där man säger vad programmet skall utföra. Observera även det extra ordet static. Förklaringar kommer senare. Frågan är nu: vad finns det i Java som motsvarar världen och kommandon?

Variabler Variabler Namgivna lådor Det vi kallar för variabler i programmering motsvarar en lagringsplats med namn. Olika typer av lådor Utöver ett namn har variabler en typ som bestämmer vad som kan lagras i dem. Variabler Typer i Java Man kan tänka på en typ som en mängd av värden. I Java finns det primitiva typer och referenstyper. Variabelnamn i Java Man väljer själv namnpår de variabler man vill använda i ett program. Man kan döpa variabler med ord som börjar med en bokstav eller (underscore) och eventuellt fortsätter med bokstäver, siffror och. I Javaprogram måste man deklarera vilka variabler man vill använda. Några deklarationer int i; int sum; double average; double x 0; String telephonenr; Grundtyper i Java Senare kommer vi att se hur vi kan definiera nya typer. Grundtyper är de typer som redan finns i Java. Primitiva typer typ mängd ops literaler int heltal + - * / % 99-12 2147483647 double reella tal + - * / 3.14-2.5 6.022e23 boolean sanningsvärden &&! true false char tecken A 1 % \n Referenstyper typ mängd ops literaler String följd av tecken + "AB" "Hello" "2.5"

Så vad kan vi göra med variabler? Tilldelning x = 3; Tilldelning x = 10 * x + x; Vårt första Java program /* här skall vi ange kommandon för att utföra beräkningen */ Lhs = Rhs I en tilldelning måste vänsterledet vara en variabel, och då menar man lådan själv. Lhs = Rhs Högerledet är ett uttryck för vilket man kan beräkna ett värde. Om man använder en variabel i uttrycket menar man värdet som är lagrat i lådan. En Algoritm: räkna 5 i=1 i för hand... 1 1 2 1+2 = 3 3 3+3 = 6 4 6+4 = 10 5 10+5 = 15 Vårt första Java program Vårt första Java program for(int i = 1; i <= 5; i++){ int sum; sum = 0; for(int i = 1; i <= 5; i++){ Man behöver värdet i sum redan första gången man skall tilldela ett värde till sum! Man måste initiera sum före for-loopen.

Vårt första Java program Att använda programmet int sum = 0; for(int i = 1; i <= 5; i++){ System.out.println(sum); System.out.println() låter programmet skriva till den så kallade standard output. Den skriver ut en sträng, men Java gör om värden av andra typer till strängar när man vill skriva ut. Hur gör vi för att räkna 1000 i=1 i? 1 + 2 + 3 + 4 +... + 1000 int sum = 0; for(int i = 1; i <= 1000; i++){ System.out.println(sum); Ändra i källkoden, kompilera om, köra en gång till! Att använda programmet Lite om strängar Eller, använd en variabel även för gränsvärdet och låt användaren ge ett värde för den när man kör programmet (genom kommandoradsargument) int sum = 0; int n = Integer.parseInt(cmdLn[0]); for(int i = 1; i <= n; i++){ sum=sum+i; System.out.println(sum); Vad kan man göra med strängar? Slå ihop String w1 = "this"; String w2 = "is"; String w3 = "mine"; System.out.println(w1+w2+w3); System.out.println(w1+w3+w2); System.out.println(w2+w1+w3); System.out.println(w2+w3+w1); System.out.println(w3+w1+w2); System.out.println(w3+w2+w1);

Mera om strängar Mera om strängar Om man ett uttryck använder operatorn + och ena operanden är en sträng så gör Java automatiskt om den andra operanden till en sträng! Att skriva ut resultatet System.out.println("The sum from 1 to " + n + " is " + sum); Hur är det med radbytet? Det går att byta rad mellan delar av uttrycket, men inte mitt i en literal! Hur åstadkommer man ett radbyte i utskriften? Man måste använda ett speciellt tecken i strängen som betyder radbyte. Man stavar det \n. System.out.println("The sum from\n1 to "+n+"\nis\n" + sum); Lite om heltal Jämförelser mellan heltal Varför räcker det inte med reella tal? När man vill ha ett nästa tal som i for-loopen. Eller när man vill räkna hur många av någonting. Då vill man inte använda reella tal! Delbarhet I ert mattekompendium finner ni Definition 2.1 Heltalet a är delare till heltalet b om det finns ett heltal c så att b = a c Man skriver a b för a delar b Givna a och b, hur kan vi se om ettsådant c finns? Vi behöver inte försöka hitta c: vi kan kolla om resten då man delar b med a är 0! I Java är b % a resten då man delar b med a Är a en delare till b? Programmet får värden för a och b som kommandoradsargument och svarar med true om a b och med false annars. public class Divisors{ public static void main(string[] cmdln){ int a = Integer.parseInt(cmdLn[0]); int b = Integer.parseInt(cmdLn[1]); System.out.println(b%a==0); Vanligt fel Att använda = (tilldelning) när man menar == (jämnförelse)! Flera jämförelseoperatorer < <= > >=

Hur många äkta delare har ett tal? Delbarhet Algoritmen för talet n Testa med alla tal mellan 2 och n 1 om de är delare och räkna dem! Kodfragment int count = 0; for (int i = 2; i < n; i++){ if (n%i==0) { count = count + 1; System.out.println(count); Hur ser det ut med delbarhet? Har stora tal många delare? Man kan ofta skriva program för att undersöka matematiska egenskaper! Jämför antalet delare Skriv så många * på rad som det finns antal delare. Gör det för alla tal under en gräns. För 1... 10 stray.hh.se% java PDC 10 * ** ** * ** stray.hh.se% Att ta hand om stora mängder data Omdirigering av standard output Man brukar skriva program för att göra saker som blir tidskrävande att göra för hand. Många gånger handlar om att komma åt stora tal och stora mängder data. Om program producerar stora mängder data är inte terminalen bästa platsen att ha data i för att analysera den. Unix > stray.hh.se% java PDC 10000 > div-1-10000 stray.hh.se% dirigerar utdata till en fil med namn div-1-10000. Lite om reella tal Vad kan man göra med reella tal? Utöver de vanliga aritmetiska operationerna, finns det ett antal funktioner i en bibliotek-klass som heter Math. Avståndet till origo Givna två reella tal som står för (x, y) - koordinater av en punkt räkna ut avståndet till origo. Pytagoras sats säger: alltså är x 2 + y 2 = d 2 d = x 2 + y 2

I java Avstånd till origo public class Distance{ public static void main(string[] cmdln){ double x = Double.parseDouble(cmdLn[0]); double y = Double.parseDouble(cmdLn[1]); System.out.println(Math.sqrt(x*x+y*y)); Utdrag från Math Math.PI 3.141592653589793 Math.E 2.718281828459045 Math.sin(Math.PI/2)) 1.0 Math.cos(Math.PI)) -1.0 Math.log(Math.E)) 1.0 Om operatorers associativitet och prioritet Uttryck Man använder variabler, literaler, operatorer och funktionsanrop för att bilda uttryck. Uttrycket står för ett värde som beräknas utifrån variablernas innehåll, literalers värde och vad operatorer och funktioner betyder. Men även i vilken ordning man räknar ut delar av uttrycket! Några uttryck och dess värde Skall 3+4*5 räknas som 7+5 eller som 3+20? Java använder samma prioritet för operatorer som ni använder i matte: först räknar man * och / och sedan + och -. Då blir det i vårt fall 3+20 alltså 23. Om operatorers associativitet och prioritet Några uttryck och dess värde Skall 5-3+7 räknas som 2+7 eller som 5-10? Java använder samma associativitet som ni använder i matte: man räknar från vänster (vänster associativitet). Då blir det i vårt fall 2+7 alltså 9.