Föreläsning 7. for-satsen Fält

Relevanta dokument
for-satsen Fält for-satsen Föreläsning 8 (OH-bilder 7) for-satsen for-sats är en styrsats för iterationer. for-sats har följande generella utseende:

I ett program hantera man ofta samlingar av objekt av samma typ.

Föreläsning 7. Fält Klassen String

Objektorienterad programmering

Fält och klassen String

Föreläsning 6. Fält. Fält Klassen String. Fält

Föreläsning 3. Iteration while-satsen

Föreläsning 7. Föreläsning 7. Fält Klassen String. Fält Klassen String. Fält. I ett program hantera man ofta samlingar av objekt av samma typ.

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Föreläsning 7. Föreläsning 7

Iteration while-satsen

Föreläsning 8. Klassen String Mer om fält Klassen ArrayList

Iteration. Föreläsning 3. TDA540 - Objektorienterad Programmering

Objektorienterad programmering

Föreläsning 3. Föreläsning 3. Iteration. while-satsen for-satsen do-satsen. while-satsen. do-satsen. Datatypen double

Föreläsning 3. Föreläsning 3

Föreläsning 3. Föreläsning 3

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

JAVAUTVECKLING LEKTION 4

Föreläsnings 9 - Exceptions, I/O

Lösningsförslag: Instuderingsfrågor, del A

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Föreläsning REPETITION & EXTENTA

Lösningsförslag till tentamen

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Lösningsförslag till tentamen

Lösningsförslag till tentamen

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

JAVAUTVECKLING LEKTION 8

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Instuderingsfrågor, del D

Mer om klasser och objekt

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Klassen String Mer om fält Något om inläsning

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Lösningsförslag till tentamen

Föreläsning 6. Top-Down Design Parameteröverföring

Att skriva till och läsa från terminalfönstret

TDDC77 Objektorienterad Programmering

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Lösningsförslag till tentamen

Föreläsningsmaterial (Logik, if-satsen & iteration)

Föreläsning 9-10 Innehåll

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

OOP Objekt-orienterad programmering

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Typkonvertering. Java versus C

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Föreläsning 2, vecka 8: Repetition

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Objektorienterad programmering

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Testning av program. Verklig modell för programutveckling

Föreläsning 6: Metoder och fält (arrays)

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Tentamen. Lösningsförslag

DAT043 Objektorienterad Programmering

Den som bara har en hammare tror att alla problem är spikar

Enkla variabler kontra referensvariabel

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Lösningsförslag till tentamen

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Objektorienterad programmering D2

Objektorienterad programmering i Java

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Tentamen , Introduktion till Java, dtaa98, dtea53

Testning och felhantering

F4. programmeringsteknik och Matlab

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

[] Arrayer = Indexerad variabel

Tentamen OOP

OOP Objekt-orienterad programmering

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Programmering för språkteknologer II, HT2011. Rum

Instuderingsfrågor, del E

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

OOP Objekt-orienterad programmering

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Lösningsförslag: Instuderingsfrågor, del D

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Tvådimensionella fält

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Lösningsförslag till tentamen

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Transkript:

Föreläsning 7 for-satsen Fält

for-satsen for-sats är en styrsats för iterationer. for-sats har följande generella utseende: for (initiering; villkor; ändring) sats; for-satsen är ekvivalent med följande while-sats: initiering; while (villor) { sats; ändring; for-satsen är en villkorsloop, men använd for-satsen endast vid räkneloopar!!!

for-satsen for (int i = 1; i <= 5; i = i + 1) System.out.println(i); for (char c = a ; c <= d ; c = (char) (c + 1)) System.out.println(c); for (double x = 0.5; x < 0.8; x = x + 0.1) System.out.println(x); Ger utskriften: 1 2 3 4 5 Ger utskriften: a b c d Ger utskriften: 0.5 0.6 0.7 0.7999999999999999

Problemexempel Skriv ett program som visar hur kapitalet på ett bankonto växer då räntan beräknas och läggs till kapitalet en gång per år. Rimlighetskontroll av indata skall göras. Analys: Indata: Startår, slutår, startkapital samt ränta. Utdata: En tabell över kapitalets tillväxer från startår till och med slutår. Exempel: En programkörning har följande utseende Ge startår och slutår:1995 1998 Ge startkapital: 1000 Ge räntesats i procent: 8.25 År Kapital 1995 1000.00 1996 1082.50 1997 1171.81 1998 1268.48

Problemexempel Design: Algoritm: 1. Läs startår 2. Läs slutår 3. Läs kapital 4. Läs räntesats 5. Skriv rubriker 6. Upprepa från startår till slutår 6.1. Skriv årtal och kapital vid årets ingång 6.2. Beräkna årets ränta och lägg denna till kapital Diskussion: Vid inläsningen måste det gälla att att kapital och räntesats är större än noll. Datarepresentation: startår och slutår är av datatypen int. kapital och räntesats är av datatypen double.

Implementation: import javax.swing.*; import java.text.*; public class Kapital { public static void main(string[] arg) { // Inläsning av startår och slutår int startar, slutar; String indata = JOptionPane.showInputDialog("Ange startå: "); startar = Integer.parseInt(indata); indata = JOptionPane.showInputDialog("Ange slutår: "); slutar = Integer.parseInt(indata); // Inläsning av kapital double kapital; while (true) { indata = JOptionPane.showInputDialog("Ge startkapital: "); kapital = Double.parseDouble(indata); if (kapital > 0) break; JOptionPane.showMessageDialog(null, "Kapitalet måste vara positivt!!");

Implementation - fortsättning: //Inläsning av räntesats double rantesats; while (true) { indata = JOptionPane.showInputDialog("Ange räntesats:"); rantesats = Double.parseDouble(indata); if (rantesats > 0) break; JOptionPane.showMessageDialog(null, "Räntesatsen måste vara positivt!!"); //Utskrift av tabell NumberFormat r = NumberFormat.getInstance(); r.setmaximumfractiondigits(2); String utdata = " År Kapital\n"; for (int ar = startar; ar <= slutar; ar = ar + 1) { utdata = utdata + ar + " " + r.format(kapital) + "\n"; kapital = kapital * (1 + rantesats/100); JOptionPane.showMessageDialog(null, utdata); // main // Kapital

Problemexempel Skriv ett program som läser in två heltal, som representerar antal rader respektive antal kolumner, och skriver ut följande mönster: ********** ********** ********** ********** ********** antal rader antal kolumner Design: Algoritm: 1. Läs antal rader r och antal kolumner k 2. För varje rad 2.1. För varje kolumn 2.1.1. Skriv ut tecknet '*' 2.2. Skriv ut radslut

Implementation: import javax.swing.*; import java.util.*; public class WriteStars { public static void main(string[] args) { while (true) { String indata = JOptionPane.showInputDialog("Ange antal rader och antal kolumner: "); if (indata == null) break; Scanner sc = new Scanner(indata); int nrofrows = sc.nextint(); int nrofcolumns = sc.nextint(); for (int row = 1; row <= nrofrows; row = row +1) { for (int col = 1; col <= nrofcolumns; col = col +1) System.out.print("*"); System.out.println(); //while // main //WriteStars

Fält I ett program hantera man ofta samlingar av objekt av samma typ. Sådana samlingar vill man vanligtvis kunna gruppera ihop till en sammanhängande struktur. För detta ändamål tillhandahåller Java språkkonstruktioner för att hantera fält.

Fält Ett fält är en numrerad samling av objekt, där varje delobjekt är av samma datatyp och delobjekten selekteras med index. tal int [] tal = new int[5]; Indexering sker alltid från 0. Oinitierade heltal får värdet 0. 0 0 0 0 0 tal[0] tal[1] tal[2] tal[3] tal[4] Varje enskilt element i ett fält kan handhas individuellt via sitt index: tal tal[0] = 1; tal[1] = 5; tal[2] = 6; 1 5 6 4 3 tal[3] = 4; tal[4] = 3; tal[0] tal[1] tal[2] tal[3] tal[4]

Fält Istället för att skapa ett fält med new kan fältet skapas genom att initiera värden till fältet vid deklarationen. Antalet värden som då deklareras bestämmer fältets storlek. list int[] list ={10, 8, 2, 12; 10 8 2 12 list[0] list[1] list[2] list[3] Längden av ett fält fås av instansvariabeln length list int nrofelements = list.length; list.length 10 8 2 12 list[0] list[1] list[2] list[3]

Fält Fält kan skapas av godtycklig typ. double [] numbers = new double[20]; String[] namn = {"Adam", "Beda", "Cesar", "David", "Erik", "Fabian"; Punkt[] punkter= new Punkt[4]; Klassen Punkt är definierad enligt: public class Punkt { private int x, y; public Punkt(int x, int y) { this.x = x; this.y = y;... //fler metoder Punkt[] punkter = new Punkter[4]; Punkter[1] = new Punkt(5, 8); punkter null null 5 8 null

Fält Tilldelning ger ingen kopia, utan en referens till samma fält! listone int[] listone = {10, 12, 4, 14, 32; int[] listtwo = listone; listtwo 10 12 4 Satsen listtwo[2] = 15; resulterar således i att även elementet listone[2] får värdet 15! listone listtwo 10 12 15 14 32 14 32

Klassen java.util.arrays I klassen java.util.arrays finns ett antal klassmetoder som är användbara när man arbetar med fält boolean equal(int[] f1, int[] f2) returnerar true om fälten f1 och f2 är lika långa och motsvarande komponenter är lika, annars returneras false int[] copyof(int[] org, int newlength) returnerar en kopia av fältet org med längden newlength. Om det kopian är kortare än org sker en trunkering och är kopian längre fylls kopian ut med 0:or. int[] copyofrange(int[] org, int from, int to) returnerar ett fält som innehåller de elementen från index from till index to i fältet org. String tostring(int[] f) returnerar en strängrepresentation av fältet f

Klassen java.util.arrays void fill(int[] f, int v) sätter alla element i fältet f till värdet v void fill(int[] f, int i1, int i2, int v) sätter elementen från index i1 till index i2-1 i fältet f till värdet v void sort(int[] f) sorterar fältet f i stigande ordning void sort(int[] f, int i1, int i2) sorterar elementen från index i1 till index i2-1 i fältet f i stigande ordning void binarysearch(int[] f, int k) söker efter komponenten k i fältet f. Ger index för k om k finns i fältet f, annars fås ett värde < 0. Obs fältet måste vara sorterat! Samtliga dessa metoder finns också för andra typer av fält, t.ex. double[], boolean[] och char[]!

Användning av metoder i java.util.arrays Exempel: Att sortera ett fält import java.util.*;... int[] list ={5, 4, 3, 8, 1, 9, 6, 7, 2; Arrays.sort(list); Ordningen på elementen i fältet list är nu 1, 2, 3, 4, 5, 6, 7, 8, 9 Exempel: Att lokalisera ett element i ett sorterat fält import java.util.*;... int[] list ={5, 4, 3, 8, 1, 9, 6, 7, 2; Arrays.sort(list); //sortera fältet int index = Arrays.binarySearch(list, 9); if (index >= 0) System.out.println("Talet 9 finns i index" + index); else System.out.println("Talet 9 finns INTE i fältet!"); Observera att sortering kan innebära att man förstör fältet, ifall om den inbördes ordningen av elementen i fältet har betydelse för applikationen.

Att genomlöpa ett fält. För att genomlöpa alla elementen i ett fält används normalt en for- loop int[] list = new int[20];... for (int i = 0; i < list.length; i = i + 1) { // gör de bearbetningar av elementen // som skall göras Exempel: Summera talen i heltalsfältet list int sum = 0; for (int i = 0; i < list.length; i = i + 1) sum = sum + list[i];

Att söka i ett osorterat fält. Ett första försök: Använd en for-sats för genomsökning av hela listan int [] list;... String indata = JOptionPane.showInputDialog("Ange talet som söks:"); int talet = Integer.parseInt(indata); Innan vi börjar boolean funnen = false; sökningen har vi inte int index = 0; // måste initieras funnit vad vi söker for (int i = 0; i < list.length; i = i + 1) { if (talet == list[i]) { funnen = true; Nu har vi funnit index = i; det vi söker if (funnen) JOptionPane.showMessageDialog(null, "Talet finns i index " + index); else JOptionPane.showMessageDialog(null, "Talet finns INTE!"); Anm: När vi funnit vad vi söker fortsätter sökningen ändock till slutet av listan! Onödigt! Sluta när vi hittat vad vi söker!

Att söka i ett osorterat fält. En bättre lösning: Använd en while-sats och en boolsk flagga för att kunna sluta när vi funnit det vi söker int [] list;... String indata = JOptionPane.showInputDialog("Ange talet som söks:"); int talet = Integer.parseInt(indata); boolean funnen = false; //har inte hittat det vi söker Avbryt sökningen när int index = 0, i = 0; vi funnit det vi söker while (i < list.length &&! funnen) { eller då hela fältet är genomsökt if (talet == list[i]) { funnen = true; //hittar det vi söker index = i; i = i + 1; if (funnen) JOptionPane.showMessageDialog(null, "Talet finns i index " + index); else JOptionPane.showMessageDialog(null, "Talet finns INTE!");

Att söka i ett osorterat fält. En svårbegriplig och därmed en dålig lösning: int [] list;... String indata = JOptionPane.showInputDialog("Ange talet som söks:"); int talet = Integer.parseInt(indata); int index; for (index = 0; index < list.length && talet!= list[index]; index++) ; if (index!= list.length) JOptionPane.showMessageDialog(null, "Talet finns i index " + index); else JOptionPane.showMessageDialog(null, "Talet finns INTE!"); Dessvärre ser man denna typ av lösningar i många läroböcker!!!

En metod som söker i ett osorterat fält. Att ta reda om ett specifikt element finns eller inte finns i en osorterat fält är i många tillämpningar ett återkommande delproblem, varför det kan vara lämpligt att skapa en metod som utför sökningen. Vi lägger metoden i en klass ArrayUtils. public class ArrayUtil { // Metoden returnerar värdet true om elem finns i fältet thelist, // annars returnerar metoden värdet false. public static boolean foundinlist(int[] thelist, int elem) { boolean found = false; //har inte hittat det vi söker int i = 0; while (i < thelist.length &&! found) { if (elem == thelist[i]) { found = true; //hittar det vi söker i = i + 1; return found; //foundinlist... //ArrayUtil

En metod som söker i ett osorterat fält. I många tillämpningar behöver man även få reda på i vilket index ett eftersökt element finns. Vi lägger till en sådan metoden i en klass ArrayUtils. public class ArrayUtil {... // Metoden returnerar index för första förekomsten av elem // i fältet thelist, finns inte elem i thelist returneras värdet -1 public static int firstindexof(int[] thelist, int elem) { boolean found = false; //har inte hittat det vi söker int index = -1, i = 0; while (i < thelist.length &&! found) { if (elem == thelist[i]) { found = true; //hittar det vi söker index = i; i = i + 1; return index; //firstindexof //ArrayUtil

Problemexempel En indatasekvens består av maximalt 100 osorterade positiva heltal. I indatasekvensen kan samma tal förekomma flera gånger. Skriv ett program som lagrar indatasekvensen i en lista på så sätt att alla dubbletter är borttagna, d v s endast första förekomsten av varje unikt tal skall lagras i listan. Inmatningen görs med användning av dialogrutor och datasekvensen avslutas att trycka på Cancel-knappen. Analys: Indata: En sekvens av maximalt 100 positiva heltal. Utdata: Den inlästa sekvensen med alla dubbletter borttagna. Exempel: Indatasekvensen 1 4 1 2 4 5 12 3 2 4 1 ger utskriften 1 4 2 5 12 3

Design: Diskussion: För att veta om ett tal har förekommit i indatasekvensen tidigare måste vi lagra den första förekomsten av talen i ett fält som vi kan kalla listan. När ett tal läses kontrollerar vi om talet redan finns i fältet listan. Om talet inte finns skall det lagras i listan. Algoritm: 1. antalelement = 0; 2. while (fler tal att läsa) 2.1. Läs talet 2.2. Kontrollera om talet finns i listan 2.3. if (talet inte finns i listan ) 2.3.1. listan[antalelement] = talet; 2.3.2. antalelement = antalelement+1; 3. Skriv ut listan Datarepresentation: talet är av datatypen int. listan är av datatypen int[100]. antalelement är av datatypen int.

Implementation: import javax.swing.*; import java.util.*; public class EjDubletter1 { public static void main(string[] args) { final int MAX = 100; int[] listan = new int[max]; int antalelement = 0; while (true) { String indata = JOptionPane.showInputDialog("Ange nästa tal (avsluta med Cancel): "); if (indata == null) break; int talet = Integer.parseInt(indata); if (!ArrayUtil.foundInList(Arrays.copyOf(listan, antalelement), talet)) { listan[antalelement] = talet; antalelement = antalelement + 1; Genomsökningen skall String utdata = ""; endast ske i den del for (int i = 0; i < antalelement; i = i +1) av fältet listan som vi utdata = utdata + listan[i] + " "; lagrat värden i. JOptionPane.showMessageDialog(null, utdata); // main //EjDubletter1

Implementation: Användning av klassen Scanner import javax.swing.*; import java.util.*; public class EjDubletter2 { public static void main(string[] args) { final int MAX = 100; int[] listan = new int[max]; int antalelement = 0; String indata = JOptionPane.showInputDialog("Ange indataserien: "); if (indata!= null) { Scanner sc = new Scanner(indata); while (sc.hasnextint()) { int talet = sc.nextint(); if (!ArrayUtil.foundInList(Arrays.copyOf(listan, antalelement), talet)) { listan[antalelement] = talet; antalelement = antalelement + 1; //if //while String utdata = ""; for (int i = 0; i < antalelement; i = i +1) utdata = utdata + listan[i] + " "; JOptionPane.showMessageDialog(null, utdata); else JOptionPane.showMessageDialog(null, "Ingen indata gavs!"); // main //EjDubletter2

Alternativ implementation (Uppdelning i underprogram): import javax.swing.*; import java.util.*; public class EjDubletter3 { private static int[] readlista() { final int MAX = 100; int[] listan = new int[max]; int antalelement = 0; String indata = JOptionPane.showInputDialog("Ange indataserien: "); if (indata!= null) { Scanner sc = new Scanner(indata); while (sc.hasnextint()) { int talet = sc.nextint(); if (!ArrayUtil.foundInList(Arrays.copyOf(listan, antalelement), talet)) { listan[antalelement] = talet; antalelement = antalelement + 1; //while //if return Arrays.copyOf(listan, antalelement); // returnera den "använda delen" av fältet // readlista Fältet som returneras skall endast innehålla första förekomsten av varje unikt tal

Alternativ implementation (Uppdelning i underprogram): Fortsättning public static void writelista(int[] listan) { if (listan.length == 0) JOptionPane.showMessageDialog(null, "Listan är tom"); else { String utdata = ""; for (int i = 0; i < listan.length; i = i +1) utdata = utdata + listan[i] + " "; JOptionPane.showMessageDialog(null, utdata); // writelista public static void main(string[] args) { int [] lista = readlista(); writelista(lista); // main //EjDubletter3

Defensiv programmering VAD HÄNDER OM VI FÖRSÖKER LÄSA IN MER ÄN 100 ELEMENT TILL FÄLTET?? ETT FEL UPPSTÅR OCH EXEKVERINGEN AV PROGRAMMET AVBRYTS MED EN FELUTSKRIFT!! Vi försöker referera till ett index som ligger utanför fältets gränser och ett undantag (exception) av typen ArrayIndexOutOfBounds inträffar. Vi kan skydda oss mot denna situation genom defensiv programmering! Anm: Java har en speciell konstruktion (try - catch) med vilken man kan fånga upp undantag och åtgärda det fel som uppstått på ett eller annat sätt. Undantag behandlas dock i denna kurs.

Defensiv programmering: Om fältet är för litet för att rymma alla elementen, skapa ett nytt fält som är 50% större private static int[] readlista() { int[] listan = new int[100]; int antalelement = 0; String indata = JOptionPane.showInputDialog("Ange indataserien: "); if (indata!= null) { Scanner sc = new Scanner(indata); while (sc.hasnextint()) { int talet = sc.nextint(); if (!ArrayUtil.foundInList(Arrays.copyOf(listan, antalelement), talet)) { if (antalelement == listan.length) { listan = Arrays.copyOf(listan, (int) (1.5*listan.length)); listan[antalelement] = talet; antalelement = antalelement + 1; //while return Arrays.copyOf(listan, antalelement); // returnera den "använda delen" av fältet // readlista Anm: Med denna variant av metoden readlist gäller inte längre begränsningen att indatasekvensen maximalt kan bestå av 100 tal, utan nu kan indatasekvensen vara godtyckligt lång.

Parallella fält. Två fält kallas för parallella fält om den data som finns i motsvarande index i de båda fälten är logiskt relaterade till varandra på något sätt. Exempel: Antag att vi har en golftävling med 5 deltagare. Vi kan lagra deltagarnas namnen i en fält, deltagarnas startnummer i ett annat fält och deltagarnas resultat i ett tredje fält: String[] namn = new String[5]; int[] startnr = new int[5]; int[] score = new int[5]; namn startnr score "Kalle" 4 74 "Anna" 5 67 "Stina" 2 73 "Åsa" 1 70 "Sven" 3 68 Är dessa fält parallella gäller att varje index k i fältet namn är relaterat till index k i fälten startnr och score, dvs "Stina" hade startnummer 2 och gick banan på 73 slag. Obs: I just detta exempel hade det givetvis varit bättre att skapat en klass GolfPlayer med instansvariablerna namn, startnr samt score och istället använt ett enda fält med objekt av denna klass.

Parametrar till main. Metoden main har en parameterlista som utgörs av ett fält av strängar: public static void main(string[] args) Detta innebär att man kan ge indata till main-metoden via parameterlistan. Betrakta main-metoden i klassen Demo nedan. Vad main gör är att skriva ut de strängar som finns i dess parameter args. public class Demo { public static void main(string[] args) { for (int i = 0; i < args.length; i = i + 1) System.out.println("Argument " + i + " = " + args[i]); //main //Demo Innehåller parametern args strängarna "Anna", "Beda" och "Doris" blir utskriften Argument 0 = Anna Argument 1 = Beda Argument 2 = Doris

Parametrar till main. Argumenten till main-metoden ges när exekveringen av programmet startas. Startas exekveringen från kommandofönstret skriver man alltså java Demo Anna Beda Doris Sker exekveringen från jgrasp skapar man ett kommandorad i vilket argumenten ges, genom att trycka på "Run Arguments" i menyn "Run".