• No results found

Lektion 3 - mer om if-sats och GUI

N/A
N/A
Protected

Academic year: 2021

Share "Lektion 3 - mer om if-sats och GUI"

Copied!
27
0
0

Loading.... (view fulltext now)

Full text

(1)

Lektion 3

Kursmål

Datatyper

If-satser

GUI

(2)

Skolverkets kursmål – vad elever ska utveckla

1. Förmåga att formulera och planera programmeringsuppgifter med pseudokod och diagramteknik.

2. Förståelse av och färdigheter i att använda datalogiska begrepp och algoritmer.

3. Förmåga att skriva, läsa, strukturera, analysera, dokumentera och kommentera källkod i ett eller flera programmeringsspråk.

4. Kunskaper om gränssnitt mot användare, filer, filsystem, operativsystem, databaser och internet.

5. Kunskaper om objektorienterad programmering i teori och praktik. 6. Förmåga att finna, diskutera, åtgärda och förhindra syntaxfel,

programkörningsfel och programmeringslogiska fel.

7. Kunskaper om samspelet mellan program, körtidsmiljö, operativsystem och hårdvara.

(3)

Skolverkets kursmål – centralt innehåll

• Sekventiell programmering i det eller de valda

programmeringsspråken. Språkurvalet kan göras från såväl

programspråk och skriptspråk som kompilerande och tolkande

språk. Ett av de valda språken ska ha tillgång till mångsidiga

objektorienterade standardbibliotek.

• Programmeringsspråkets eller -språkens grundläggande

datatyper samt fördefinierade strukturer, regler och syntax.

• Traditioner och nya trender i utvecklingen av

programmeringsspråk.

• Kontrollstrukturer, till exempel sekvens, selektion och

iteration, planerade med aktivitetsdiagram och skrivna i ett

väl implementerat programflöde.

(4)

Skolverkets kursmål – centralt innehåll

• Variablers och konstanters synlighet och livslängd.

• Enkla sorteringsalgoritmer och sökningsalgoritmer.

• Grundläggande rekursiva algoritmer.

• Interaktion med användaren i ett enkelt grafiskt

användargränssnitt.

• Implementeringar av datastrukturer, till exempel vektor, fält,

lista och trädstruktur.

• Felsökning av källkod och undantagshantering i interaktiva

program.

• Samspelet mellan program och dator från källkod till exekvering.

• De vanligaste programmeringsspråkens krav på körtidsmiljöer

och operativsystem samt deras aktuella användningsområden.

Källa: www.skolverket.se

(5)

Olika heltalsrepresentationer

byte: använder minnesutrymmet 1 byte (8 bitar), d.v.s det finns

2

8

talkombinationer.

-128 till 127

short: 2 byte, d v s 2

16

talkombinationer

-32 768 till 32 767

int:

4 bytes, 2

32

kombinationer

-2 147 483 648 till 2 147 483 647

long: 8 bytes, 2

64

kombinationer

(6)

Olika flyttalsrepresentationer

float: 4 bytes representation

double: 8 bytes

Ett flyttal (decimaltal) kan även skrivas i

grundpotensform t.ex.:

double d = 2.3e4;

3,4

×10

38

(7)

Typomvandling (cast)

Anta följande: int ht = 12; double ft = ht; Anta följande: double ft = 23.45; int ht = ft;

Måste göra följande:

double ft = 23.45; int ht = (int) ft;

OK, då ett flyttal innehåller mer information än ett heltal!

ft kommer att innehålla 12.0.

INTE OK, då ett flyttal innehåller mer information!

OK, men ht innehåller 23.

Avhuggning sker.

(8)

Mera om utskrifter

Inuti

System.out.println(”…”); kan man lägga in s.k.

Escape-sekvenser som gör att ens utskrift blir snyggare:

\n hoppar till ny rad \t horisontell tab \b backsteg \” citationstecken \\ backslashtecken

Ex.

System.out.print(”Kenne\ttel: 112\nLarsa\ttel: 911”);

Ger utskriften:

Kenne

tel: 112

Larsa

tel: 911

(9)

Typkonvertering:

char ct = ’k’;

int cn = (int) ct;

int a = 9;

int b = 2;

double c = (double)a / b;

’k’ ct 107 cn 9 a 2 b 4.5 c ASCII-tabellvärde a görs om till 9.0

(10)

Programmeringstänk

Programmet är imperativt och sekventiellt.

Imperativt = gör som du skriver till det!

Sekventiellt = kör från toppen till botten!

Programmeraren måste tänka på hur man ska börja sitt

program på bästa sätt!

Det finns många olika bra (och dåliga) lösningar till

problem!

(11)

Relativa operatorer

Relations

operator Symbol Exempel Värde

lika med == 1 == 4 false

skilt från != 1 != 4 true

större än > 1 > 4 false

större än eller

lika med >= 1>=4 false

mindre än < 1 < 4 true

mindre än eller

(12)

Logiska operatorer

Logisk

operator Symbol Exempel Värde

OCH && uttryck_1 && uttryck_2 true om båda är sanna, annars false

ELLER || uttryck_1 || uttryck_2 true om minst ett är sant, annars false

ICKE ! ! uttryck false om uttrycket är sant, annars true

(13)

Programmeringsexempel

Barn (16 år eller yngre) och pensionärer (över 65 år) åker för halva

priset inom kollektivtrafiken. Fråga efter ålder och biljettpris och

skriv ut vad biljetten kostar.

mata in biljettpris

mata in ålder

om( ålder <= 16 || ålder > 65)

biljettpriset halveras

annars

(14)

Programmeringsexempel

Barn (16 år eller yngre) och pensionärer (över 65 år) åker för halva

priset inom kollektivtrafiken. Fråga efter ålder och biljettpris och

skriv ut vad biljetten kostar. (Förutsätter att ett

Scanner-objekt,

sc, finns.)

System.out.print(”Biljettpris: ”); double p = sc.nextDouble(); System.out.print(”Ålder: ”); int a = sc.nextInt(); if(a <= 16 || a > 65) p = p/2;

(15)

Uppgifter

1. Fortsätt att arbeta med utdelat blad om if-satser (se Lektion 2)

2. Skriv ett program som beräknar hur mycket växel man ska få tillbaka när man har handlat samt i vilka sedlar och mynt växeln ska utbetalas.

Indata till programmet ska vara det pris man ska betala och det belopp man betalar med. För enkelhets skull antas att alla belopp är ett helt antal kronor. Det antas också att växel aldrig betalas tillbaka med sedlar av högre valör än 100 kr. Om man t ex har handlat för 711 kr och betalar med en tusenkronorssedel ska programmet skriva ut att man ska ha två hundrakronorssedlar, en femtiokronorssedel, en tjugokronorssedel, ett tiokronorsmynt, ett femkronorsmynt och fyra enkronor. Använd gärna grafiskt användargränssnitt eller dialogrutor.

(16)

Javas klassbibliotek (API)

• Färdigskrivna klasser klara att använda. • Uppdelat i packages (paket).

• Görs tillgängliga via kommandot import. • T. ex import java.util.*;

• De mest grundläggande funktionerna finns i paketet

java.lang

• Till GUI används framförallt javax.swing,

java.awt.event och java.awt

(17)

Vanliga grafiska komponenter

JLabel JTextField JButton JTextArea JPanel JFrame

(18)

JFrame-objekt

För att skapa fönster (JFrame-objekt) görs följande: Importera paketet javax.swing

Låt klassen ärva från JFrame

setSize() bestämmer fönstrets storlek

setLocation bestämmer placering på

skärmen

setTitle() bestämmer texten i

titelraden

setVisible() gör fönstret synligt (eller

osynligt)

setDefaultCloseOperation() bestämmer vad som ska

hända när man stänger fönstret.

(19)

JLabel

Används för att visa texter (och bilder).

Det finns många metoder:

http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JLabel.html

setFont(new Font(”Arial”, Font.BOLD, 20));

Bestämmer hur texten ska se ut.

setOpaque(true);

(20)

JButton

Det finns många metoder:

http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JButton.html

För att det ska hända något vid knapptryckning måste gränssnittet ActionListener implementeras

Kap 4 : Sid 9

JavaJavisst!+ © Ove Lundgren

Om gränssnitt (interface)

Vi ska strax gå igenom hur man får något att hända då knappen trycks (händelsehantering).

Vi kommer då att behöva använda gränssnitt (som vi tog upp i Kapitel3, sista sidan). Repetition:

Det är inte är tillåtet med multipelt arv i Java, det vill säga, man får inte ärva från flera klasser.

Däremot kan man implementera (lägga till) ett (eller flera) gränssnitt (eng. interface)

Ett gränssnitt är en speciell slags ” klass” som bara innehåller tomma metoder avsedda att omdefin ieras.

Med ordet implements implementeras gränssnittets metoder i vår nya klass.

I java-kod ser det ut så här: public class C extends A i mpl ements B { }

Händelsehantering

Naturligtvis vill vi att något ska hända när vi trycker på knappen!

När någon trycker på en knapp skapas ett händelseobjekt (ett objekt ur en klass vid namn ActionEvent)

Objektet är argument i en metod som heter actionPerformed() och i den metoden beskriver vi vad som ska hända. En metod som beskriver vad som ska hända kallas allmänt för händelsehanterare.

Metoden actionPerformed() finns tyvärr inte deklarerad i klassen JFrame. Vi implementerar därför ett gränssnitt, ActionListener, där metoden actionPerformed() finns.

Ett JButton-objekt har en metod som heter addActionListener()

Den metoden måste anropas för att associera knappen till actionPerformed()-metoden.

Den gör så att knappen ” lyssnar” på en knapptryckning och anropar actionPerformed()-metoden då knappen trycks.

Klasser och gränssnitt som har med händelsehantering att göra finns i ett paket som heter java.awt.event

Klass A Fält Metoder: metod1(){ … } metod2(){ … } metod3(){ … } Interface B Metoder: metodA(){ } metodB(){ } Klass C Fält Metoder: metod1(){ … } metod2(){ … } metod3(){ … } metodA(){ … } metodB(){ … }

(21)

JTextField

Används för att skriva in text. Det finns många metoder:

http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JTextField.html

(22)

Mall för GUI

import javax.swing.*; import java.awt.*;

import java.awt.event.*;

public class MinFrame extends JFrame implements ActionListener{

//deklarera instansvariabler

public MinFrame(){

//instansera (skapa) instansvariabler setLayout(new FlowLayout()); /**lägg ut komponenter * koppla händelselyssnare * sätt fönsterdesign * gör fönstret synligt * */ }

public void actionPerformed(ActionEvent e){

//skriv rutin för händelsehanteringen }

public static void main(String[] args) {

MinFrame f = new MinFrame(); }

(23)
(24)

Omvandla från String till tal

Anta att vi har en referensvariabel tf som refererar till en

JTextField.

Metoden

tf.getText();

returnerar en teckensträng (String)

För att kunna använda (räkna) detta ”värde” måste man omvandla det till lämplig datatyp:

Ex.

String temp = tf.getText();

double flyttal = Double.parseDouble(temp); int heltal = Integer.parseInt(temp);

Lagras som en sträng (String)!

Omvandlas till double!

(25)

Exceptions

Om man inte skriver in ett tal i t.ex. en textruta och försöker göra om innehållet till ett tal (int/double) genereras ett s.k. undantag (exception).

Lösningen är att ta hand om undantagen: Ex: try{ x = Integer.parseInt(tf.getText()); //etc. } catch(Exeption ex){ l.setText(”Felinmatning!”); }

(26)

Format (avrundning)

Anta följande kod:

double tal = (double)2/3;

String.format(”Kvoten blir: %5.1f”, tal); String.format(”Kvoten blir: %4.3f”, tal);

Skriver ut tal med minst fem teckenpositioner och 1 decimal

Skriver ut tal med minst fyra teckenpositioner och 3 decimaler

(27)

Uppgifter

1. Testa att göra uppgifterna 1-4 i kapitel 1 som ett GUI.

2. Gör en GUI-applikation som är en ”miniräknare”, enligt

nedan. Man ska kunna addera, subtrahera, multiplicera

och dividera. Om man skriver in felaktiga värden (t.ex.

inga siffor) ska detta tas om hand.

References

Related documents

Målet med trafikplanen är att framtida problem i trafiksystemet förutses och för- hindras. Under kommande år kommer antalet barn i Skövde kommuns förskolor och grundskolor att

När Fadah släpptes från fängelset fick hon inte komma tillbaka till skolan. Hon har heller inte fått något jobb och har allt- så

Syftet med studien var att belysa hur vår målgrupp upplever att vara i behov av stöd och hjälp för att klara vardagliga göromål, samt om vår målgrupp upplever att de

Arbetsolycksfallsförsäkring (TFA) gäller – anmäl till Collectum hur många tjänstemän äldre än 65 år Arbetare Fora Tjänsteman Collectum. Ålderspension kan inbetalas

Om nyanställning arbetare äldre än 65 år gäller endast TFA Eventuellt även deltidspension/flexpension beroende på vilket kollektivavtal – manuell hantering

Du kan fem dagar i veckan beställa Närtrafik från din bostad antingen till Borgholm, Löttorp eller Färjestaden och även till Kalmar, men då med anslutning via

För de som har tagit ut inkomstpensionen före 65 år så sänks inkomstpensionen vid 65 år i genomsnitt med 1,8 procent på grund av omräkningen från preliminära till

Se Appendix A i Euler &amp; Euler-kompendiet för fler sätt att konstruera matriser i Maple.)... Vi sätter angivna värden på variablerna a, b och c, och räknar sedan ut de