Lektion 3
Kursmål
Datatyper
If-satser
GUI
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.
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.
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
Olika heltalsrepresentationer
byte: använder minnesutrymmet 1 byte (8 bitar), d.v.s det finns
2
8talkombinationer.
-128 till 127
short: 2 byte, d v s 2
16talkombinationer
-32 768 till 32 767
int:
4 bytes, 2
32kombinationer
-2 147 483 648 till 2 147 483 647
long: 8 bytes, 2
64kombinationer
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
38Typomvandling (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.
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
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.0Programmeringstä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!
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
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
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
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;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.
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
Vanliga grafiska komponenter
JLabel JTextField JButton JTextArea JPanel JFrameJFrame-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.
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);
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(){ }
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
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(); }
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!
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!”); }
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