• No results found

Lektion 7- do-while, for och arryer

N/A
N/A
Protected

Academic year: 2021

Share "Lektion 7- do-while, for och arryer"

Copied!
23
0
0

Loading.... (view fulltext now)

Full text

(1)

Lektion 7

do-while-sats

for-sats

(2)

Mera om användarstyrning

Om man vill att användaren ska styra programmet – använd

break.

if(villkor_för_att_sluta) break;

När break-satsen utförs bryts while-loopen och

exekveringen (körningen) fortsätter efter while-loopens slut. För dialogrutor – om användaren klickar på

(3)

Gör ett menystyrt program som ger användaren möjlighet att räkna ut areor av olika figurer (kvadrat, rektangel, triangel och cirkel). Menyn ska se ut

ungefär sa här:

while(true) {

//Menypresentation

int val = sc.nextInt();

if(val == 1) { //Läs in sida //Beräkna area //Skriv ut area } else if(val == 2) { //Läs in längd och bredd //Beräkna area //Skriv ut area } else if(val == 3) { //Läs in bas och höjd //Beräkna area //Skriv ut area } else if(val == 4) { //Läs in radie //Beräkna area //Skriv ut area } else if(val == 0){ //Avsluta break; } else{ //Felinmatning } } ”Kapsla in” det som

ska göras varje gång

Användaren väljer att avsluta

(4)

do-while

I en while-sats testas villkoret först, sedan utförs de satser som ska

göras i loopen.

I en do-while-sats körs satserna först en gång och sedan testas

villkoret. while(uttryck){ sats_1; sats_2; . . } do{ sats_1; sats_2; . . }while(uttryck);

(5)

Do-while vs. while-sats

Skriv ett program som ber användaren att mata in tal. Programmet ska hålla reda på hur många tal som är

positiva respektive negativa. Skriver användaren in talet 0 ska resultatet skrivas ut och programmet avslutas.

(6)

while vs do-while

int pos = 0, neg = 0, t = -1;

while(t != 0){ System.out.print("Tal: "); t = sc.nextInt(); if(t > 0) pos++; else if(t < 0) neg++; } System.out.println(pos); System.out.println(neg);

int pos = 0, neg = 0, t = 0;

do{ System.out.print("Tal: "); t = sc.nextInt(); if(t > 0) pos++; else if(t < 0) neg++; }while(t != 0); System.out.println(pos); System.out.println(neg);

(7)

while vs do-while (med break)

int pos = 0, neg = 0, t = 0;

while(true){ System.out.print("Tal: "); t = sc.nextInt(); if(t == 0) break; else if(t > 0) pos++; else neg++; } System.out.println(pos); System.out.println(neg);

int pos = 0, neg = 0, t = 0;

do{ System.out.print("Tal: "); t = sc.nextInt(); if(t == 0) break; else if(t > 0) pos++; else neg++; }while(true); System.out.println(pos); System.out.println(neg);

(8)

do-while

Det är en smaksak vilken man väljer – båda är lika bra!

Ni ska kunna använda båda

Ni ska även kunna använda for-satsen, som kommer snart.

(9)

for-sats

for(int j = 0; j < 6; j += 2) System.out.println(j);

Följande sker:

j initieras (till 0)

Villkoret j < 6 undersöks (true)Skriver ut j:s värde

j ökas med 2 (till värdet 2)

Villkoret j < 6 undersöks (true)Skriver ut j:s värde

j ökas med 2 (till värdet 4)

Villkoret j < 6 undersöks (true)Skriver ut j:s värde

j ökas med 2 (till värdet 6)

Villkoret j < 6 undersöks (false)

for(init; villkor; ändring){ sats_1;

sats_2; .

. }

Följande görs i denna ordning: • Initiering (görs endast första

gången) • VillkorSatserÄndringVillkorSatserÄndringVillkorSatserÄndring Klammrar om två eller fler satser

(10)

for vs while

for(int i = 10; i > 0; i--) System.out.print(i+" "); int i = 10; while(i > 0) System.out.print((i--)+" ");

Det är en smaksak vilken man föredrar.

Man brukar använda for-sats när man använder räknare som räknar upp eller ner för varje varv.

(11)

Läs in räntesats, saldo och antal år som önskas. Gör en räntetabell, d v s skriv saldoökning per år. Använd dialogrutor

import static javax.swing.JOptionPane.*;

public class Bank {

public static void main(String [] arg){

for(;;){

String s = showInputDialog("Räntesats?");

if(s == null)

break;

double ränta = Double.parseDouble(s); s = showInputDialog("Saldo?");

double saldo = Double.parseDouble(s); s = showInputDialog("Antal ar?");

int n = Integer.parseInt(s); String tabell = "";

for(int ar = 1; ar <=n; ar++){

saldo = saldo + saldo*0.01*ränta;

tabell = tabell + ar + " " +(int)saldo + "\n"; } showMessageDialog(null, tabell); } System.exit(0); } } statisk import

Samma som while(true)

Initierar en tom sträng

tabell fylls på efterhand

(12)
(13)

Fält (Arrayer, Vektorer)

Om programmet ska hantera data av samma typ är det bra att lagra dessa i s.k. fält (arrayer, vektorer). Tänk er en

bokhylla, där det på varje hyllplan ligger någonting (t ex ett heltal).

int[] n = new int[5];

definierar och skapar ett tomt fält (innehåller 0)

int[] n = {2, 2, 1, 9, 7};

definierar och skapar ett fält med värden

Obs! Postitionerna i fältet är numrerade från 0, d.v.s. första positionen har position 0, sista har n-1, där n är antalet

element (platser) i fältet.

2 2 1 9 7 n

(14)

Fält (Arrayer ,Vektorer)

Vill man ta reda på ett värde för en viss position:

System.out.print(n[3]);

eller lagra en position i en annan variabel:

int temp = n[4];

Vill man ta reda på längden för ett fält:

int l = n.length; l 5 temp 7 2 2 1 9 7 n n[0] n[1] n[2] n[3] n[4]

(15)

Läsa in heltal till ett heltalsfält

class LasaInTalTillArray {

public static void main(String[] arg) {

int[] tal = new int[5];

for (int i = 0; i < tal.length; i++) {

System.out.print("Skriv in tal "+i+": "); tal[i] = sc.nextInt();

}

System.out.print("Talen baklänges: ");

for (int i = tal.length-1; i >= 0; i--) {

System.out.print(tal[i]+" "); }

} }

(16)

Lektionsövning

Skriv ett program som ger utskriften nedan då det körs.

Skapa en heltalsarray med plats för 5 heltal och låt användaren mata in heltal (markerade med fet stil nedan).

Skriv in fem heltal Skriv tal nummer 0: 4 Skriv tal nummer 1: -4 Skriv tal nummer 2: 2 Skriv tal nummer 3: 0 Skriv tal nummer 4: 3

Tredje talet som du matade in var 2 Du matade in dessa tal: 4 -4 2 0 3 Baklänges: 3 0 2 -4 4

(17)

Leta efter tal i array

Har man en array med data kan man leta upp sökt data. Man måste gå igenom arrayen (t ex for-sats)

Läs in sökt tal

Ej hittat talet && Ej gått igenom hela

arrayen

Aktuell position == sökt tal

Hittat talet Gå vidare false true true Ej hittat talet false

(18)

class LetaEfterTalIArray{

public static void main(String[] arg){

int[] tal = new int[5];

for (int i=0; i<tal.length; i++){

System.out.print("Skriv in tal "+i+": "); tal[i] = sc.nextInt();

}

System.out.print("Sökt tal?! ");

int sök = sc.nextInt();

boolean hittad = false;

for (int i = 0; i < 5 && !hittad; i++){

if(tal[i] == sök){ //hittat talet

System.out.println("Talet "+sök+" finns på position

"+i); hittad = true;

} }

if(!hittad){

System.out.println("Talet "+sök+" finns inte i

arrayen");

} }

(19)

Uppgifter

1. Skriv ett menystyrt program där användaren har följande

val:

1. Kvadrat

2. Rektangel

3. Cirkel

4. Triangel

0. Avsluta

Beroende på vilket val som görs ska programmet be

användaren läsa in behövlig data och sedan räkna ut

vald figurs omkrets och area. För t ex en rektangel

behövs det ju en bredd och en längd och för en cirkel en

radie.

(20)

Uppgifter

2. Skriv ett program där användaren anger hur många gånger en tärning ska kastas. Resultatet läggs in i ett heltalsfält

(array) beroende på vad tärningen visar. Därefter ska programmet skriva ut en tabell för hur resultatet blev:

Hur många tärningskast ska göras: 10 Resultat: 1:or 2 2:or 1 3:or 1 4:or 2 5:or 2 6:or 1

int kast = (int)(Math.random()*6)+1; slumpar ett

(21)

Uppgifter

3. Lägg till en kolumn för den procentuella andelen från förra uppgiften.

Hur många tärningskast ska göras: 10 Resultat: Antal % 1:or 2 20 2:or 1 10 3:or 1 10 4:or 2 20 5:or 2 20 6:or 1 20

(22)

Uppgifter

4. Ändra från Uppgift 3 så att summan av två tärningskast summeras och därefter registreras i statistiken. (Kast med två tärningar.) En körning med detta program skulle kunna ge det resultat som du ser i rutan:

Kast med två tärningar

Hur många kast önskas: 10000 Resultat

Antal Antal Relativ

prickar kast frekvens(%)

2 –or 278 2.8 3 –or 545 5.5 4 –or 815 8.1 5 –or 1114 11.1 6 –or 1366 13.7 7 –or 1654 16.5 8 –or 1416 14.2 9 –or 1138 11.4 10 –or 848 8.5 11 –or 545 5.5 12 –or 281 2.8

(23)

Uppgifter

5. Skriv ett program som skapar en heltalsarray med plats för 6 heltal. Låt därefter användaren mata en heltal på alla platser i arrayen. Låt programmet räkna och skriva ut medelvärdet av de inmatade talen. Låt dessutom programmet skriva ut vilka av de inmatade talen som är störst respektive minst.

Figure

tabell fylls på efterhand

References

Related documents

(C) Vi avslutar med ett tredje sätt att lösa problemet på. de utgör sidorna i en rätvinklig triangel).. Visa att minst en av kateterna x, y för en sådan taltrippel är ett

Po¨ angen p˚ a godk¨ anda duggor summeras och avg¨ or slutbetyget.. L¨ osningarna skall vara v¨ almotiverade och

Det är välkänt att ringen av heltal har entydig faktorisering, varje positivt heltal kan skrivas entydigt, upp till ordning, som en produkt av primtal.. Vi ska undersöka om en

I detta avsnitt kommer vi att särskilt förhålla oss till lagen att varje uppåt begränsad mängd av reella tal har en minsta övre gräns bland de reella talen.. Den här lagen

Påstående ”jag skulle kunna konfrontera ett nättroll om jag såg ett trolla mot någon annan online”, ”jag skulle inte konfrontera ett nättroll som trollade mot mig

Hur många enheter måste man minst tillverka för att man med en sannolikhet, som är minst 0, 99, skall ha tillverkat åtminstone en defekt enhet?.

Tekniska nämnden anhåller om kommunfullmäktiges godkännande av friköp av fastigheten Trollhättan 6.. Stadskontoret förordar att kommunstyrelsen

Verb som slutar på –ar i presens (slutar på –a i