Array
• Skriv ett program som frågar följande:
”Hur många tal vill du mata in?”
användaren matat in ett tal t.ex n.
då frågar programmet n ggr följande
”mata in tal nr x:”
(där x är från 1 t.o.m n)
vid varje förfråga, matar användaren in ett påhittat tal
och efter alla inmatade tal skriver programmet ut alla
inmatade tal i omvända ordning.
t.ex om användaren har matat in följande tal i den
ordning som nedan
2, 4, 33, 34, 1 , 56
då skrives ut alla inmatade tal i omvänd ordning:
56, 1, 34, 33, 4, 2
Programkodens uppbyggnad
Deklaration av klass {
Deklaration av variabel1 (klassvariabler)
Deklaration av variabel2 (klassvariabler)
Flera instansvariabler eller klassvariabler
kan deklareras här …
Deklaration av metode1 (){
deklaration av lokala variabler ...
}
Deklaration av metode2 (){
deklaration av lokala variabler ...
}
Flera instansmetoder , klassmetoder
och konstruktörer kan deklareras här …
}
Variabler
En variabel kan vara någon av följande:
• Klassvariabel
• Instansvariabel
• Lokalvariabel
Kännetecken för variabler
• Kännetecken för en klassvariabel är:
1. deklareras med nyckelordet static
2. deklareras alltid utanför alla metoder men inom klassen
• Kännetecken för en instansvariabel är:
1. deklareras INTE med nyckelordet static
2. deklareras alltid utanför alla metoder men inom klassen
• Kännetecken för en lokalvariabel är:
1. deklareras INTE nyckelordet static
2. deklareras alltid inom en metod
Variabler
deklareras
instansvariabler
1.utanför metoder
2. utan static
klassvariabler
1.utanför metoder
2.med static
lokala variabler
1.inuti en metod
2.utan static
Programkodens uppbyggnad
Deklaration av klass {
Deklaration av variabel1 (klassvariabler)
Deklaration av variabel2 (klassvariabler)
Flera instansvariabler eller klassvariabler
kan deklareras här …
Deklaration av metode1 (){
deklaration av lokala variabler ...
}
Deklaration av metode2 (){
deklaration av lokala variabler ...
}
Flera instansmetoder , klassmetoder
och konstruktörer kan deklareras här …
}
Metoder
En metod kan antingen vara en
• Klassmetod
• Instansmetod
• Konstruktör
Kännetecken för metoder
• Kännetecken för en klassmetod är att:
1. deklareras med nyckelordet static
2. har en returtyp
• Kännetecken för en instansmetod är att:
1. deklareras INTE med nyckelordet static
2. har en returtyp
• Kännetecken för en konstruktör är att:
1. deklareras INTE med nyckelordet static
2. har ingen returtyp
Metod
deklareras
Klassmetod
•med static
•med returtyp
Instansmetod
• utan static
•med returtyp
Konstruktör
•utan static
•utan returtyp
klassvariabler och klassmetoder
import java.io.*;
Deklaration av
class Person {
klassvariabler
static String namn;
Deklaration
static byte ålder;
och initiering
static String mailAdress;
av
static BufferedReader stdin = new BufferedReader(
klassvariabel
new InputStreamReader(System.in));
public static void main(String []args)throws IOExcep…{
System.out.print(”Vad heter du?”);
namn = stdin.readLine();
Deklaration
System.out.print(”Hur gammal är du?”);
och
String ålderStr =stdin.readLine();
initiering
ålder = Byte.parseByte(ålderStr);
av
System.out.print(”vad har du för e-mail?”);
lokal
mailAdress = stdin.readLine();
variabel
int född = 2001 - ålder;
System.out.println(namn+” är född år ”
+född+” kan nås via mail: ”+mailAdress);
}
}
Deklaration av
Vi delar main till flera små delar
…
…
public static void main(String []args)throws IOException{
System.out.print(”Vad heter du?”);
1
namn = stdin.readLine();
System.out.print(”Hur gammal är du?”);
2
String ålderStr =stdin.readLine();
ålder = Byte.parseByte(ålderStr);
System.out.print(”vad har du för e-mail?”);
3
mailAdress = stdin.readLine();
int född = 2001 - ålder;
System.out.println(namn+” är född år ”
+född+” kan nås via mail: ”+mailAdress);
}
}
på vilket sätt är de lika? Ok,vi tittar närmare på de:
System.out.print(”Vad heter du?”);
namn = stdin.readLine();
System.out.print(”Hur gammal är du?”);
String ålderStr =stdin.readLine();
System.out.print(”vad har du för e-mail?”);
mailAdress = stdin.readLine();
1
2
3
• Det syns att System.out.println() anropas (används)
i första raden i alla tre.
• Det syns att stdin.readLine() anropas (används) i
andra raden i alla tre.
vad finns för olikheter då?
t.ex ”vad heter du”,”hur gammal är du”
och ”vad har du för e-mail” är olika men alla är av samma
typ alltså String.
Hur ser klassmetoden ut i java kod?
static String metodnamn( String parameternamn)
Returtyp (utdata typ)
i detta fall String
Indata typ
i detta fall String
De får vi välja hur som helst
Metoden kommer att se ut som nedan
Static String läsSvar(String frågan){
System.out.println(frågan);
String svar=stdin.readLine();
return svar;
}
Följande modell hjälper att skriva ihop
en metod som vi önskar.
Metoden har till uppgift att skriva ut på skärmen den sträng
som kommer in som indata till metoden samt låta användaren
mata in en sträng och inmatade strängen ska returneras.
”vahid”
”vad heter du?”
”Hur gammal är du?”
”vad har du för e-mail?”
Metod
”18”
”[email protected]”
Det syns att metoden tar en strängar som indata
och returnerar den inlästa strängen som utdata
Den nya klasskoden ser så här ut
class Person {
static String namn;
static byte ålder;
static String mailAdress;
static BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
public static void main(String []args)throws IOException{
namn = läsSvar (”Vad heter du?”);
String ålderStr=läsSvar (”Hur gammal är du?”);
ålder = Byte.parseByte(ålderStr);
mailAdress = läsSvar (”vad har du för e-mail?”);
int född = 2000 - ålder;
System.out.println(namn+” är född år”
+född+” kan nås via mail: ”+mailAdress);
}
static String läsSvar(String frågan)throws IOException{
System.out.println(frågan);
String svar=stdin.readLine();
return svar;
}
}
Program
main
indata
m1()
m2()
m3()
Program
main
m1()
m2()
m3()
Program
main
m1()
m2()
m3()
Program
main
m1()
m2()
m3()
Program
main
m1()
m2()
m3()
Program
main
m1()
m2()
m3()
Program
main
m1()
m2()
m3()
Program
main
m1()
m2()
m3()
Program
main
utdata
m1()
m2()
m3()
Exempel
Skriv ett program som frågar efter temperatur
i celsius och skriver ut motsvarnde temperatur
i Farenheit och Kelvin.
F=32+(1.8 x C)
K=273.2 + C
Uppgift
Skriv ett program som frågar användarens
förnamn, efternamn och studiestatus sedan skriver ut
användarens användarnamn samt
email-adress.
Krav:
•
Programmet ska bestå av två klasser.
•
I den ena klassen (körbara) ska main deklareras.
•
I den andra ska finnas några metoder som genererar fram
användarnamn och e-mail adress.
•
Användaren ska kunna generera flera användarnamn och
e-mail adresser utan att behöva starta programmet igen
för en ny körning.
Uppgift forts.
För att få lite bättre bild av hur programmet ska fungera brukar man skriva
några scenario:
En körninga kan se så här ut(Scenario 1):
Vad heter du i förnamn? Vahid
Vad heter du i efternamn? Mosavat
Vad har du för studiestatus? d97
Ditt användar namn är d97_mod
Ditt e-mail adress är [email protected]
Vill du generera ett nytt användarnamn?(j/n) j
Vad heter du i förnamn ? …
(här kommer programmet att fråga efternamn osv igen)
En annan körninga av samma program kan se så här ut(Scenario 2):
Vad heter du iförnamn? Per
Vad heter du i efternamn? Johansson
Vad har du för studiestatus? m00
Ditt användar namn är m00_jor
Ditt e-mail adress är [email protected]
Vill du generera ett nytt användarnamn?(j/n) n
(Här kommer programmet avslutas)
Lösning
class Konto{
static String anvNamn;
//skapaAnvNamn tar namn, efternamn och studiestatus
//Och genererar ett användarnamn som tillslut returneras
public static String skapaAnvNamn(String namn,
String efternamn, String status){
char bokst1=efternamn.charAt(0);
char bokst2=efternamn.charAt(1);
char bokst3=namn.charAt(namn.length()-1);
anvNamn=status+"_"+bokst1+bokst2+bokst3;
return anvNamn;
}
//skapaEmail tar anvNamn och genererar en e-mail adress
//samt skriver ut den men returnerar inte
}
public static void skapaEmail(String anvNamn){
char linje=anvNamn.charAt(0);
System.out.println("din e-mail är: "+
anvNamn+"@"+linje+".kth.se");
}
Lösning forts.
class Mimer{
static String anvNamn;
static boolean fortsätt=true;
static String namn;
static String linje;
static String efternamn;
static BufferedReader stdin = new BufferedReader
(new InputStreamReader(System.in));
public static void main(String []args)throws IOException{
do{
namn = läsSvar ("Vad heter du i förnamn? ");
efternamn= läsSvar("Vad heterdu i efternamn? ");
linje= läsSvar("vad har du för studiestatus?(t.ex:m95) ”);
anvNamn=Konto.skapaAnvNamn(namn, efternamn,linje);
System.out.println("ditt användarnamn är "+anvNamn);
Konto.skapaEmail(anvNamn);
villDuFortsätta();
}while(fortsätt);
}
…
… fortsättning på nästa sida
Lösning forts.
…fortsättning på Mimer
static String läsSvar(String frågan)throws IOException{
System.out.print(frågan);
String svar=stdin.readLine();
return svar;
}
static void villDuFortsätta()throws IOException{
System.out.println("vill du fortsätta med ett nytt
namn?(j/n)");
String svar=stdin.readLine();
if(svar.equalsIgnoreCase("n")){
System.out.println("Tack och hej, välkommen
åter!");
fortsätt=false;
}
}
}