Föreläsning 5:
Metoder och enkel inmatning
Eva Blomqvist
[email protected]
Department of Computer and Information Science (IDA)
Linköpings universitet
Sweden
November 3, 2013
1
Innehåll
n 
n 
n 
Repetition: listor och mängder
Enkel inmatning - att hämta data från användaren
Metoder
q 
Abstraktion och återanvändning av kod
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
2
Klasser för listor och mängder
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
3
Listor och mängder - motivering och
definitioner (forts.)
n 
n 
n 
Lista = en ordnad mängd med objekt (upprepning är ok)
Mängd = inte ordnad, element förekommer bara en gång
Listor och mängder finns som klasser i Javas
stadardbibliotek
q 
Exempel: ArrayList (java.util.ArrayList)
n 
n 
n 
q 
Listklass som internt representerar listan som en array, men där
storleken uppdateras efter behov
Skapas genom följande uttryck (exempel med heltalselement):
ArrayList<Integer> tallista = new ArrayList();!
Finns metoder såsom "add" som lägger till ett element sist i listan,
"get" som hämtar elementet på en viss position osv.
Exempel: HashSet (java.util.HashSet)
n 
n 
n 
Mängdklass som internt representerar mängden som en hashtabell
Skapas genom följande uttryck (exempel med heltalselement):
HashSet<Integer> talmangd = new HashSet();!
Metoden "add" lägger till ett element om det inte redan finns
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
4
Vad är "Integer" - varför inte int?
n 
Varje primitiv datatyp i Java har en motsvarande
"wrapper"-klass
q 
n 
n 
Varje "wrapper"-klass innehåller en mängd bra-att-ha
metoder för att hantera värden av den primitiva datatypen
Exempel: Integer
q 
n 
Dvs Integer för int, Double för double osv...
parseInt(String s) - metod för att göra om en textsträng, t ex
"1024" till heltalet 1024
ArrayList och HashSet är exempel på klasser som
kräver en typ-parameter, dvs när vi skapar en ny lista/
mängd ska vi ange typen av element den ska innehålla
q 
Typen kan inte vara en primitiv typ, utan vi måste använda
"wrapper"-klasserna
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
5
ArrayList - Exempel med for-each loop
class ListaForEach
{
public static void main (String[] args)
{
java.util.ArrayList<Integer> tal
= new java.util.ArrayList<Integer>();
for (int i = 1; i <= 10 ; i++)
tal.add(i);
for (int j : tal){
System.out.println("Talet är: " + j);
}
}
}
n 
OBS: typen på elementen måste vara en klass i Javas standardbibliotek
q 
Vi återkommer till "wrapperklasser" lite senare, men ni måste skriva Integer
istället för bara int när ni skapar en ArrayList
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
6
ArrayList
- Exempel med iterator och while-loop
class ListaIterator
{
public static void main (String[] args)
{
java.util.ArrayList<Integer> tal
= new java.util.ArrayList<Integer> ();
for (int i = 1; i <= 10 ; i++)
tal.add(i);
java.util.Iterator<Integer> taliterator = tal.iterator();
while (taliterator.hasNext()){
System.out.println("Talet är: " + taliterator.next());
}
}
}
n 
En iterator har två viktiga metoder: hasNext() - returnerar ett booleskt
värde, sant om det finns ett nästa element, och next() som returnerar
nästa element
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
7
ArrayList - tips inför labben
n 
För att lösa labbuppgiften behöver ni förmodligen mer
information än såhär om klassen ArrayList och kanske
fler exempel...
q 
q 
...en viktig del i den här kursen är att lära sig att läsa
Javadoc för Javas standardbibliotek - börja alltid där!
Behöver ni fler exempel: Googla!
n 
n 
Väldigt få programmerare idag använder sig av läroböcker för
att slå upp exempel, eftersom språken ändrar sig så fort - en
lärobok blir gammal på bara ett par år!
Vi vill att ni ska lära er att hitta aktuella exempel genom att
googla eftersom det är så man oftast gör i "verkligheten"
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
8
Inmatning
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
9
Tillföra nya data
n 
Initiera variabler med kända värden
q 
q 
n 
Men... oftast vill vi inte ha ett program som är låst till ett
visst värde
q 
n 
int tal = 4;
uppdatering: tal = tal + 2;
Exempel: ta ut pengar från bankkonto - kunden vill
bestämma summan som ska tas ut! Inte alltid samma!
Standardinmatning
q 
q 
q 
Konsolfönster/terminalfönster för in- och utmatning
Utmatning: System.out....
Finns även: System.in....
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
10
Tangentbordsinmatning
n 
Programmet stannar vid en viss punkt i exekveringen och
väntar på data
q 
n 
Användaren skriver in data via tangentbordet
q 
n 
Bör skriva ut en uppmaning åt användaren att ange indata
Avslutas med return - programmet hämtar data
Inmatningsbuffert
q 
q 
q 
Plats i minnet mellan användaren och programmet inmatningskö
Kan korrigeras innan man tryckt på retur
Programmet hämtar ett eller flera värden från bufferten
n 
n 
q 
Om inte alla värden hämtas ligger dessa kvar och kan användas
nästa gång programmet vill ha en inmatning (istället för att vänta
på användarens inmatning)
Även "retur" är ett tecken och lagras i bufferten
Kontrollera och agera om det är ett olämpligt värde
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
11
Buffertexempel
n 
Uttag från bankkonto:
q 
q 
q 
q 
q 
q 
q 
q 
q 
n 
Mata in kontonummer: !
123456789 <retur>!
Bufferten: 123456789 <retur>!
Programmet läser in kontonumret
Bufferten: <retur>!
Programmet vill nu fråga användaren efter uttagsbelopp
Mata in uttagsbelopp: !
Det finns redan tecken i bufferten, så programmet väntar
inte utan kör vidare!
Programmet läser in <retur> som uttagsbelopp - FEL!
Vi måste se till att bufferten rensas innan vi går vidare så
att vi kan läsa in nästa värde korrekt
q 
OBS! Med klassen Scanner undviker vi detta problem!
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
12
Funktioner för inmatning i Javas
standardbibliotek
n 
Inmatning av teckensträngar och primitiva värden:
Scanner (java.util.Scanner)!
q 
Skapa en Scanner:
java.util.Scanner
q 
q 
q 
in = new java.util.Scanner(System.in);
Läsa in ett heltal:
int tal = in.nextInt();
Väntar på att användaren ska mata in ett heltal och trycka
på return, då hämtas heltalet och lagras i "tal"-variabeln
Läsa in ett decimaltal:
double tal = in.nextDouble();
Väntar på att användaren ska mata in ett decimaltal och
trycka på return, då hämtas heltalet och lagras i "tal"variabeln
Läsa in en textsträng (en rad):
String rad = in.nextLine();!
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
13
Uttag - läsa in uttagsbelopp
class Uttag
{
public static void main (String[] args)
{
double saldo = 200.0;
java.util.Scanner in = new java.util.Scanner(System.in);
double uttag = in.nextDouble();
saldo = saldo - uttag;
System.out.println("Nytt saldo är: " + saldo);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
14
Uttag - läsa in uttagsbelopp
(med uppmaning)
class Uttag2
{
public static void main (String[] args)
{
double saldo = 200.0;
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println("Ange uttagsbelopp: ");
double uttag = in.nextDouble();
saldo = saldo - uttag;
System.out.println("Nytt saldo är: " + saldo);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
15
Läsa in en rad text
class TextIn
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println("Skriv ditt namn: ");
String namn = in.nextLine();
System.out.println("Ditt namn är: " + namn);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
16
Bra att veta: andra metoder för inläsning
n 
Fördel med en Scanner: hanterar bufferten som vi
förväntar oss (kastar bort <return>-tecken), vi behöver
normal inte bekymra oss om att rensa den mellan
inläsningar.
n 
Det finns mängder med andra metoder för att läsa in text
och andra värden från standardinmatningsenheten
Ni behöver inte dessa för labbarna!
n 
q 
Men, om ni är intresserade, eller behöver dem för projektet:
n 
n 
System.in.read() OBS! rensar inte bufferten från styrtecken!
till och från fil kommer vi till senare: paketet java.io
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
17
Metoder
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
18
Metod - vad är det?
n 
n 
En procedur (ett antal steg) som vi bryter ut och ger ett
eget namn - ett namngivet stycke kod
Varför?
q 
q 
Abstraktion: gör programmet mer överskådligt - vi behöver
inte veta hur något utförs i detalj när vi ser huvudflödet i
programmet (t ex i main-metoden)
Mindre och mer återanvändbar kod: om samma sak ska
göras på flera olika ställen i programmet skapar man en
metod för att bara behöva skriva koden en gång, istället för
på varje ställe den ska utföras
n 
Men... upprepning var inte det en loop?
Upprepning ett antal gånger på raken -> loop
Upprepning av samma sak fast från olika ställen i programmets
kod -> metod
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
19
Metod - varför: abstraktion
n 
Anta att jag skriver ett program för att göra uttag på ett
bankkonto som kräver följande steg:
1. 
2. 
3. 
4. 
5. 
6. 
7. 
8. 
9. 
10. 
11. 
12. 
Be användaren mata in kontonummer
Användaren matar in kontonummer
Be användaren mata in upptagsbelopp
Användaren matar in uttagsbelopp
Hämta saldo för det givna kontonumret
Om saldot är mindre än uttagsbeloppet skriv ut felmeddelande
och avsluta programmet
Annars, minska saldot med uttagsbeloppet
Be användaren mata in en orsak/kommentar till uttaget
Användaren matar in en orsak/kommentar
Spara det nya saldot och kommentaren
Visa det nya saldot på skärmen
Avsluta programmet
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
20
Metod - varför: abstraktion
n 
n 
För att göra proceduren mer överskådlig kan jag skriva den i
mer abstrakta termer, dvs utelämna en del av de detaljerade
stegen och istället sammanfatta dem som ett steg...
T ex såhär:
1. 
2. 
3. 
4. 
5. 
n 
n 
Hämta kontonummer och uttagsbelopp
Hämta saldo för det givna kontonumret
Om saldot är mindre än uttagsbeloppet skriv ut felmeddelande
och avsluta programmet
Annars, beräkna och visa nytt saldo samt en kommentar
Avsluta programmet
Den här beskrivningen är mer abstrakt, dvs vi talar inte om
vilka detaljerade steg vi faktiskt måste göra för att "hämta
kontonummer och uttagsbelopp"
Punkterna ovan kan i ett Java-program representeras av ett
antal olika metoder - innehållet i metoderna beskriver sedan
vilka steg vi faktiskt måste göra!
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
21
Metoder - behöver vi använda dem?
n 
n 
Försök att alltid abstrahera era program så mycket det
går - antingen top-down (enklast) eller bottom-up!
Metoder från början (top-down):
q 
n 
När ni ska skapa lite längre program, med många delsteg,
börja med att skapa en övergripande struktur i mainmetoden m h a ett antal "tomma" metoder som ni sedan
efter hand fyller på med kod.
Metoder för att "förkorta" långa kodstycken (bottom-up):
q 
Känns main-metoden lång och "rörig", så att ni knappt själva
har koll på vad den gör längre? Fundera över vilka som är
"huvudstegen" i programmet och skapa metoder för dessa,
klipp sedan ut kodstycken ur main-metoden och lägg i de
nya metoderna istället!
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
22
Metod - varför: upprepning av kod
class Uppmaning
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.print("Skriv ett heltal: ");
int tal = in.nextInt();
tal = tal + 3;
System.out.print("Skriv ett heltal: ");
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
23
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
24
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
25
in
java.util.Scanner
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
26
in
java.util.Scanner
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
27
in
java.util.Scanner
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
28
in
java.util.Scanner
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
29
in
java.util.Scanner
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
30
in
java.util.Scanner
tal
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
31
in
java.util.Scanner
tal
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = 7;
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
32
in
java.util.Scanner
tal
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
33
in
java.util.Scanner
tal
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = 7 + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
34
in
java.util.Scanner
tal
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
35
in
java.util.Scanner
tal
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
36
in
java.util.Scanner
tal
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45> Skriv ett heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
37
in
java.util.Scanner
tal
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45> Skriv ett heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
38
in
java.util.Scanner
tal
int
tal2
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = 2;
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45> Skriv ett heltal: 2
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
39
in
java.util.Scanner
tal
int
tal2
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45> Skriv ett heltal: 2
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
40
in
java.util.Scanner
tal
int
tal2
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = 10 * 2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45> Skriv ett heltal: 2
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
41
in
java.util.Scanner
tal
int
tal2
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = 10 * 2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45> Skriv ett heltal: 2
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
42
in
java.util.Scanner
tal
int
tal2
int
Metod - uppmaningen som metod
class UppmaningMetod
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
uppmana();
int tal = in.nextInt();
tal = tal + 3;
uppmana();
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana()
{
System.out.print("Skriv ett heltal: ");
}
}
evabl45> Skriv ett heltal: 7
evabl45> Skriv ett heltal: 2
evabl45> Resultat: 20
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
43
in
java.util.Scanner
tal
int
tal2
int
Metod med parameter
class UppmaningMetodParam
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
44
Metod med parameter
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
45
Metod med parameter
"Skriv ett heltal:"
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
46
maning
String
Metod med parameter
"Skriv ett heltal:"
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
47
maning
String
Metod med parameter
"Skriv ett heltal:"
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana("Skriv ett heltal:");
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
48
maning
String
Metod med parameter
"Skriv ett heltal:"
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana("Skriv ett heltal:");
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
49
maning
String
Metod med parameter
"Skriv ett heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana("Skriv ett heltal: ");
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s = "Skriv ett heltal: ")
{
System.out.print(s);
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
50
maning
String
"Skriv ett heltal: "
s
String
Metod med parameter
"Skriv ett heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana("Skriv ett heltal: ");
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
51
maning
String
"Skriv ett heltal: "
s
String
Metod med parameter
"Skriv ett heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana("Skriv ett heltal: ");
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
52
maning
String
Metod med parameter
"Skriv ett heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
53
maning
String
Metod med parameter
"Skriv ett heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
54
maning
String
Metod med parameter
"Skriv ett heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
55
maning
String
Metod med parameter
"Skriv ett nytt heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
56
maning
String
Metod med parameter
"Skriv ett nytt heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
57
maning
String
Metod med parameter
"Skriv ett nytt heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana("Skriv ett nytt heltal: ");
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
58
maning
String
Metod med parameter
"Skriv ett nytt heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana("Skriv ett nytt heltal: ");
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s = "Skriv ett nytt heltal: " )
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
59
maning
String
"Skriv ett nytt heltal: "
s
String
Metod med parameter
"Skriv ett nytt heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana("Skriv ett nytt heltal: ");
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s = "Skriv ett nytt heltal: " )
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
evabl45> Skriv ett nytt heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
60
maning
String
"Skriv ett nytt heltal: "
s
String
Metod med parameter
"Skriv ett nytt heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s = "Skriv ett nytt heltal: " )
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
evabl45> Skriv ett nytt heltal:
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
61
maning
String
tal2
int
Metod med parameter
"Skriv ett nytt heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s = "Skriv ett nytt heltal: " )
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
evabl45> Skriv ett nytt heltal: 4
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
62
maning
String
tal2
int
Metod med parameter
"Skriv ett nytt heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s = "Skriv ett nytt heltal: " )
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
evabl45> Skriv ett nytt heltal: 4
evabl45>
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
63
maning
String
tal2
int
Metod med parameter
"Skriv ett nytt heltal: "
in
class UppmaningMetodParam
{
java.util.Scanner
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = tal + 3;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
int
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s = "Skriv ett nytt heltal: " )
{
System.out.print(s);
}
}
evabl45> Skriv ett heltal: 3
evabl45> Skriv ett nytt heltal: 4
evabl45> Resultat: 24
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
64
maning
String
tal2
int
Två metoder och returvärde
class UppmaningMetodRetur
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(tal);
maning = "Skriv ett nytt heltal: ";
uppmana(maning);
int tal2 = in.nextInt();
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
public static int plustre(int i)
{
int summan = i + 3;
return summan;
}
}
November 3, 2013
65
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(tal);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
public static int plustre(int i)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return summan;
}
}
November 3, 2013
66
66
maning
String
3
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(tal);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
public static int plustre(int i)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return summan;
}
}
November 3, 2013
67
67
maning
String
3
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(3);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
public static int plustre(int i)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return summan;
}
}
November 3, 2013
68
68
maning
String
3
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(3);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
public static int plustre(int i = 3)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return summan;
}
}
November 3, 2013
69
69
maning
String
i
int
3
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(3);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
summan
{
System.out.print(s);
}
int
public static int plustre(int i)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return summan;
}
}
November 3, 2013
70
70
maning
String
i
int
3
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(3);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
summan
{
System.out.print(s);
}
int
public static int plustre(int i)
{
int summan = 3 + 3;
evabl45> Skriv ett heltal:
return summan;
}
}
November 3, 2013
71
71
maning
String
i
int
3
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(3);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
summan
{
System.out.print(s);
}
int
public static int plustre(int i)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return summan;
}
}
November 3, 2013
72
72
maning
String
i
int
3
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(3);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
summan
{
System.out.print(s);
}
int
public static int plustre(int i)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return 6;
}
}
November 3, 2013
73
73
maning
String
i
int
3
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(3);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
public static int plustre(int i)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return 6;
}
}
November 3, 2013
74
74
maning
String
3
Två metoder och returvärde
"Skriv ett heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = 6;
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
public static int plustre(int i)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return 6;
}
}
November 3, 2013
75
75
maning
String
3
Två metoder och returvärde
"Skriv ett nytt heltal: "
class UppmaningMetodRetur
in
{
public static void main (String[] args)
java.util.Scanner
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
uppmana(maning);
int tal = in.nextInt();
tal = plustre(tal);
maning = "Skriv ett nytt heltal: ";
tal
uppmana(maning);
int tal2 = in.nextInt();
int
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static void uppmana(String s)
{
System.out.print(s);
}
public static int plustre(int i)
{
int summan = i + 3;
evabl45> Skriv ett heltal:
return summan;
}
}
November 3, 2013
76
76
maning
String
3
Två parametrar och returvärden
class UppmaningMetodRetur2
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
int tal = lasin(maning, in);
tal = plustre(tal);
maning = "Skriv ett nytt heltal: ";
int tal2 = lasin(maning, in);
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static int lasin(String s, java.util.Scanner in)
{
System.out.print(s);
int tal = in.nextInt();
return tal;
}
public static int plustre(int i)
{
int summan = i + 3;
return summan;
}
}
November 3, 2013
77
Två parametrar och returvärden
class UppmaningMetodRetur3
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
int tal = lasin(maning, in);
tal = plustre(tal);
maning = "Skriv ett nytt heltal: ";
int tal2 = lasin(maning, in);
tal = tal * tal2;
System.out.println("Resultat: " + tal);
}
public static int lasin(String s, java.util.Scanner in)
{
System.out.print(s);
return in.nextInt();
}
public static int plustre(int i)
{
return i + 3;
}
}
November 3, 2013
78
Metoddeklaration - sammanfattning
n 
n 
Deklarationen kallas även ibland för "header"
Deklarationen innehåller ett antal delar, ta t ex metoddeklarationen
från förra bilden:
public static int plustre(int i) {}!
q 
q 
q 
q 
q 
public static - betyder att metoden kan kommas åt från andra
klasser och att det är en klassmetod (vi återkommer till detta i del 2 - just
nu kan ni deklarera alla metoder som public static)
int - är returtypen för metoden, d v s vår exempelmetod returnerar ett
värde av typen int. Om en metod inte returnerar något värde skriver vi
"void" istället för returtyp, jämför t ex med main-metoden.
plustre - är metodens namn som vi använder för att anropa den, dvs
när vi vill använda koden som metoden innehåller
() - innehåller en lista på parametrar, dvs indata som metoden måste
förses med för at fungera. Varje parameter anges först med en typ, t ex
int i vårt exempel, och sedan ett namn som värdet har inne i metoden, i
vårt fall bokstaven i. Om metoden inte behöver några indata lämnas
parentesen tom.
{} - omsluter metodens kropp, dvs koden som körs när metoden
anropas. Allt före { räknas till metoddeklarationen, eller "headern"!
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
79
Metod som anropar en annan metod
class UppmaningFlerMetoder
{
public static void main (String[] args)
{
System.out.println("Resultat: " + hamtatal());
}
public static int hamtatal()
{
java.util.Scanner in = new java.util.Scanner(System.in);
String maning = "Skriv ett heltal: ";
int tal = lasin(maning, in);
tal = plustre(tal);
maning = "Skriv ett nytt heltal: ";
int tal2 = lasin(maning, in);
tal = tal * tal2;
return tal;
}
public static int lasin(String s, java.util.Scanner in)
{
System.out.print(s);
return in.nextInt();
}
public static int plustre(int i)
{
return i + 3;
}
}
November 3, 2013
80
Lokala variabler
n 
En variabel som skapas i en metod är inte tillgänglig för andra metoder
- den är "lokal" i den metoden
q 
n 
När en metod avslutas försvinner alla variabler som fanns inne i metoden alla värden "kastas"
En parametervariabel som lagrar ett inskickat värde kan inte påverka
värdet på en variabel i den anropande metoden inifrån metoden
q 
Namnet på parametern gäller bara inne i metodens egen kropp
class PaverkaVariabel
{
public static void main (String[] args)
{
int i = 10;
plustre(i);
System.out.println("Siffran: " + i); //skriver ut "Siffran: 10"
}
public static void plustre(int i)
{
i = i + 3;
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
81
Globala variabler - konstant
n 
En variabel som deklareras utanför klassens metoder blir "global" -den kan
kommas åt av alla dess metoder
q 
n 
För att bli tillgänglig i static metoder (t ex i main-metoden) måste även variabeln
vara deklarerad som static (vi återkommer till detta i del 2 - just nu kan ni
deklarera alla globala variabler som public static)!
Undvik globala variabler så långt det är möjligt!
q 
Undantag: variabler som inte ska ändras - global konstant!
class Cirkel
{
public static final double PI = 3.14;
public static void main (String[] args)
{
double r = 10;
double om = omkrets(r);
System.out.println("Omkrets: " + om);
}
public static double omkrets(double radie)
{
return 2 * radie * PI;
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
82
Metoden "main" - ett specialfall
class Cirkel
{
public static final double PI = 3.14;
public static void main (String[] args)
{
double r = 10;
double om = omkrets(r);
System.out.println("Omkrets: " + om);
}
public static double omkrets(double radie)
{
return 2 * radie * PI;
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
83
Att skicka in parametrar till ett program
class Namn
{
public static void main (String[] args)
{
if (args.length > 0)
System.out.println("Du skrev: " + args[0]);
}
}
n 
n 
Inifrån Eclipse: kompilera klassen, välj "Run Configurations...", skriv
ett namn under fliken "Arguments" i fältet "Program arguments"
Från ett terminalfönster: kör klassen med kommandot "java Namn
<textsträng>" där du ersätter <textsträng> med ett namn
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
84
Vad är överlagring?
n 
Anta att vi vill ha en metod "max" som returnerar det
största värdet av två ELLER tre tal - ibland vill vi skicka in
två tal ibland 3
q 
q 
Går detta att lösa?
Om vi deklarerar följande metod måste vi alltid ge den två tal
som indata:
public static int max (int i1, int i2) { ... }!
q 
Kan vi skriva en annan variant av metoden som istället tar
tre tal som indata? Såhär:
public static int max (int i1, int i2, int i3) { ... }!
q 
Kan dessa metoder finnas samtidigt i vår klass? Hur kan vi
skilja dem åt?
n 
n 
Genom deras signatur = namn + parameterlista
max (int i1, int i2) respektive
max (int i1, int i2, int i3) !
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
85
Vad är överlagring?
n 
Överlagring är alltså när vi har flera metoder med samma
namn men olika signatur!
q 
n 
Rätt metod-kropp väljs utifrån den signatur som passar in
Jämför med metoder i klassen String
q 
Det finns åtta olika metoder som heter valueOf() i
klassen String, det som skiljer dem åt är vilken typ av
parameter som krävs som indata
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
86
Exempel
class Overlagring
{
public static void main (String[] args)
{
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.print("Skriv ett heltal: ");
int tal = in.nextInt();
tal = plustre(tal);
System.out.print("Skriv ett decimaltal: ");
double tal2 = in.nextDouble();
tal2 = plustre(tal2);
System.out.println("Resultat: " + tal + " " + tal2);
}
public static int plustre(int i)
{
return i + 3;
}
public static double plustre(double d)
{
return d + 3;
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
87
Rekursion - en metod som anropar sig
själv
n 
Rekursion - metod för problemlösning där en metod anropar
sig själv tills en viss situation uppstår
q 
q 
"Basfallet" = situationen när vi inte längre ska anropa metoden
Rekursivt anrop = metoden anropar sig själv
Exempel - summera alla tal mellan ett givet tal (n) och 1
public static int sum (int n) {
int result; // hjälpvariabel för resultatet
if (n == 1) // basfallet
result = 1;
else
result = n + sum(n-1); //rekursivt anrop
return result;
}
n 
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
88
Rekursion - en metod som anropar sig
själv
Exempel: vad händer med n=3?
public static int sum (int n) {
int result; // hjälpvariabel för resultatet
if (n == 1) // basfallet
result = 1;
else
result = n + sum(n-1); //rekursivt anrop
return result;
}
n 
n 
n 
n 
n 
n 
n 
n 
vi anropar sum(3)...
n != 1, vi kör "else"-alternativet: result = 3 + sum(2)
vi inväntar resultatet av sum(2)
sum(2): n!=1, vi kör "else"-alternativet: result = 2 + sum(1)
vi inväntar resultatet av sum(1)
sum(1): n == 1, basfallet! - result =1; return 1;
vi backar utåt i våra rekursiva anrop, i sum(2): result = 2 + 1; return 3;
vi backar igen, i sum(3): result = 3 + 3; return 6; -> vi är klara!
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
89
Att jobba med metoder
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
90
Abstrakt till konkret - att utgå från metoder
n 
En förenklad variant av exemplet i början:
1. 
2. 
3. 
4. 
5. 
n 
Hämta kontonummer och uttagsbelopp från användaren
Hämta saldo för det givna kontonumret
Om saldot är mindre än uttagsbeloppet skriv ut
felmeddelande och avsluta programmet
Annars, beräkna och visa nytt saldo
Avsluta programmet
Låt oss skapa programmet, och utgå från metoder...
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
91
Abstrakt till konkret - att utgå från metoder
n 
Vi skapar en ny klass i Eclipse som vi kallar Uttag3, och
Eclipse genererar automatiskt en tom main-metod åt oss:
public class Uttag3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
92
Abstrakt till konkret - att utgå från metoder
n 
Vad ska programmet göra? Låt oss börja med
huvudstegen i vår punktlista, och lägga till dem som
metoder!
q 
q 
För varje steg lägger vi till en eller flera metodanrop i mainmetoden
För varje sådan metod skapar vi en metoddeklaration, samt
en kropp som än så länge bara innehåller ett påhittat
returvärde - på så vis kan vi redan nu kompilera och köra
programmet, även fast det ännu inte gör alla de steg vi vill
att det ska göra!
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
93
Abstrakt till konkret - att utgå från metoder
public class Uttag3 {
public static void main(String[] args) {
int accNo = getAccountNumber();
double amount = getWithdrawalAmount();
double balance = getCurrentBalance(accNo);
if (balance < amount) System.out.println("Too large amount!");
else showNewBalance(amount, balance);
}
public static int getAccountNumber() {
return 0;
}
public static double getWithdrawalAmount() {
return 0.0;
}
public static double getCurrentBalance(int number) {
return 0.0;
}
public static void showNewBalance(double amount, double balance) {
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
94
Abstrakt till konkret - att utgå från metoder
n 
Från och med nu kommer vi inte lägga till någon mer kod
i vår main-metod utan bara i de övriga metodkropparna
q 
n 
Nästa steg är att börja skriva koden för var och en av
metoderna...
q 
n 
main-metoden får en väldigt enkel och begriplig struktur
Att vi bara behöver koncentrera oss på en uppgift i taget gör
att det blir färre fel i koden och det är enklare att komma på
en bra lösning för varje deluppgift för sig
Låt oss börja med den första metoden...
q 
getAccountNumber() ska fråga användaren efter ett
kontonummer och returnera det numret
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
95
Abstrakt till konkret - att utgå från metoder
public static
}
November 3, 2013
int getAccountNumber() {
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println("Ange kontonummer: ");
int number = in.nextInt();
return number;
96
Abstrakt till konkret - att utgå från metoder
n 
Nästa metod ska läsa in ett uttagsbelopp från
användaren...
public static
}
double getWithdrawalAmount() {
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println("Ange uttagsbelopp: ");
double amount = in.nextDouble();
return amount;
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
97
Abstrakt till konkret - att utgå från metoder
n 
Nu ska vi hämta aktuellt saldo för angivet kontonummer...
q 
Vi skulle t ex kunna koppla upp oss mot en databas med
kontoinformation och hämta saldot därifrån, men i vårt exempel
nöjer vi oss med ett påhittat testvärde, låt oss säga 200.0 kr
public static double getCurrentBalance(int number) {
return 200.0;
}
n 
Vi går vidare till den sista metoden, som ska beräkna och
visa det nya saldot för användaren...
public static void showNewBalance(double amount, double balance) {
double newBalance = balance - amount;
System.out.println("Nytt saldo: " + newBalance);
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
98
public class Uttag3 {
public static void main(String[] args) {
int accNo = getAccountNumber();
double amount = getWithdrawalAmount();
double balance = getCurrentBalance(accNo);
if (balance < amount) System.out.println("Too large amount!");
else showNewBalance(amount, balance);
}
public static int getAccountNumber() {
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println("Ange kontonummer: ");
int number = in.nextInt();
return number;
}
public static double getWithdrawalAmount() {
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println("Ange uttagsbelopp: ");
double amount = in.nextDouble();
return amount;
}
public static double getCurrentBalance(int number) {
return 200.0;
}
public static void showNewBalance(double amount, double balance) {
double newBalance = balance - amount;
System.out.println("Nytt saldo: " + newBalance);
}
}
November 3, 2013
99
Abstrakt till konkret - att utgå från metoder
n 
Fördelar med att utgår från metoder
q 
q 
q 
q 
Enkelt att få överblick över main-metoden redan från början
main-metoden "växer" inte och fortsätter vara begriplig
Vi har ett körbart (och testbart) program redan efter att ha
skrivit några rader kod
Vi kan fokusera på en uppgift i taget när vi sedan skriver
kroppen för de olika metoderna
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
100
Konkret till abstrakt - "bryta ut" metoder
n 
Det kan hända att man inte tänker sig för och börjar
skriva all sin kod i main-metoden, men snart upptäcker
att den blir alldeles för stor
q 
q 
q 
n 
Tumregel i kursen: får inte hela din main-metod plats på
skärmen samtidigt - då är den definitivt för stor! Helst
bör main-metoden bara innehålla 10-20 rader kod...
"Bryt ut" delar av koden, d v s skapa metoder och klipp ut
delar av din kod som läggs i metoder istället
Mer jobb, mer kod att skriva om, än om du planerar för
metoder från första början!
På labbarna: om handledarna tycker att din main-metod
(eller någon annan metod) är för stor kommer de
uppmana er att skapa fler metoder istället!
- komplettering
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
101
Konkret till abstrakt - "bryta ut" metoder
public class Uttag4 {
public static void main(String[] args) {
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println("Ange kontonummer: ");
int accNo = in.nextInt();
System.out.println("Ange uttagsbelopp: ");
double amount = in.nextDouble();
double balance = 200.0;
if (balance < amount) System.out.println("Too large amount!");
else {
double newBalance = balance - amount;
System.out.println("Nytt saldo: " + newBalance);
}
}
}
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
102
Konkret till abstrakt - "bryta ut" metoder
public class Uttag4 {
public static void main(String[] args) {
java.util.Scanner in = new java.util.Scanner(System.in);
int account = getAccountNumber(in);
double newbalance = getNewBalance(account, in);
if (newbalance < 0) System.out.println("Too large amount!");
else System.out.println("Nytt saldo: " + newbalance); }
public static int getAccountNumber(java.util.Scanner in){
System.out.println("Ange kontonummer: ");
int accNo = in.nextInt();
return accNo;
}
public static double getNewBalance(int accNo, java.util.Scanner in){
System.out.println("Ange uttagsbelopp: ");
double amount = in.nextDouble();
double balance = getCurrentBalance(accNo);
return balance - amount;
}
public static double getCurrentBalance(int accNo){
return 200.0;
}
}
November 3, 2013
103
Sammanfattning
n 
Inmatning av data via terminalfönstret - ett sätt för
användaren att ge indata till programmet
q 
q 
n 
Använd klassen java.util.Scanner och dess metoder
nextInt(), nextDouble() och nextLine()
Finns alternativ - läs gärna om dessa i Javadoc för
standardbiblioteket eller Googla, men se upp: alla klasser
hanterar inte bufferten lika bra, dvs ni kan få problem med
inläsning av "skräptecken"
Metoder - ett sätt att abstrahera och återanvända kod
q 
q 
q 
q 
I metoddeklarationen anger vi (förutom public static)
returtyp, namn på metoden och dess parametrar
I metodkroppen skriver vi den kod som ska köras när
metoden anropas
Metoder kan anropas inifrån andra metoder, på så vis
skapas en struktur av mer och mer detaljerade instruktioner
Använd metoder - main-metoden ska helst inte vara större
än 10-20 rader kod för uppgifterna i den här kursen!
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
104
Nästa gång
n 
n 
Undantag
Andra sätt att läsa in och mata ut data
q 
Läsa och skriva från/till fil
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
105
Department of Computer and Information Science (IDA)
Linköpings universitet, Sweden
November 3, 2013
106