Malmö högskola
Teknik och samhälle
2007/2008
Laboration 12, Arrayer
Avsikten med denna laboration är att du ska träna på att använda arrayer.
Skapa paketet laboration12 i ditt laborationsprojekt innan du fortsätter på denna laboration.
Uppgift 1
Skriv metoden
public void baklänges(int[] tal)
vilken skriver ut talen i en array med heltal baklänges. Talen separeras med komma-tecken och
ett mellanslag. Om du testkör metoden med koden:
Uppgift1 upp1 = new Uppgift1();
int[] fält1 = {1,2,3};
int[] fält2 = {1000,100,10,1};
System.out.print("Fält 1 baklänges: ");
upp1.baklänges(fält1);
System.out.println();
System.out.print("Fält 2 baklänges: ");
upp1.baklänges(fält2);
System.out.println();
så ska du få resultatet till höger.
Uppgift 2
Skriv metoden
public int finns(int tal, int[] arrayMedTal)
vilken kontrollerar om tal finns i arrayen arrayMedTal. Om tal finns i arrayen så returneras
positionen för tal i arrayen (första förekomsten om flera gånger) och annars returneras -1.
Testprogram
Körresultat
Uppgift2 upp2 = new Uppgift2();
int[] array = {1,2,3,9,5,9};
int position;
position = upp2.finns(7,array);
System.out.println("Position för 7: "+position);
position = upp2.finns(9,array);
System.out.println("Position för 9: "+position);
DA129A, Programmering 1
1
Position för 7: -1
Position för 9: 3
Malmö högskola
Teknik och samhälle
2007/2008
Uppgift 3
Skriv ett program vilket
•
deklarerar en array som rymmer 10 heltal
•
låter användaren mata in tio heltal vilka lagras i arrayen. Inmatningen ska ske med
inmatningdialog, t.ex. genom Input.readInt(String).
•
skriver ut heltalen i den ordning de matades in
•
skriver vart annat tal framlänges
•
skriver ut samtliga tal baklänges
Programmet ska innehålla metoderna:
•
skrivTal(int[] array)
•
skrivVartannat(int[] array)
Dessutom bör din lösning använda metoden baklänges, vilken du skrev i uppgift 1.
Körresultat vid inmatning av talen: 12 5 8 2 3 3 3 11 221 7:
Följande tal matades in: 12, 5, 8, 2, 3, 3, 3, 11, 221, 7
Vartannat tal: 12, 8, 3, 3, 221
Talen baklänges: 7, 221, 11, 3, 3, 3, 2, 8, 5, 12
Uppgift 4
Skriv metoden
public double[] baklänges(double[] array)
vilken tar en array som input och som returnerar en array med samma element men med
elementen i omvänd ordning.
Testprogram
Utskrifter
Uppgift4 upp4 = new Uppgift4();
double[] array = {3.2, 4.7, -13.1, 14, 17.25};
double[] kopia = upp4.baklänges(array);
for(int i=0; i<array.length; i++)
System.out.print(array[i]+" ");
System.out.println();
for(int i=0; i<kopia.length; i++)
System.out.print(kopia[i]+" ");
System.out.println();
3.2
17.25
4.7
-13.1
14.0
14.0
-13.1
4.7
17.25
3.2
Tänkbar algoritm för baklänges-metoden
1.
Skapa en array med samma kapacitet som input-fältet
2.
Kopiera elementen från input-arrayen till den nya arrayen. Men gör det så att elementen
byter plats, ungefär med tilldelningen (i är loop-variabel)
nyArray[i] = array[array.length-i-1];
3.
Returnera referensen till den nya arrayen.
DA129A, Programmering 1
2
Malmö högskola
Teknik och samhälle
2007/2008
Uppgift 5
Skriv metoden
public double[] intervall(double[] array, double min, double max)
vilken tar en array och ett intervall (min-max) som input och som returnerar en ny array som
innehåller de element i input-arrayen som är i intervallet (min <= element <= max).
Tänkbar algoritm för intervall-metoden
1.
Räkna antalet element i input-arrayen som är i intervallet
2.
Skapa en ny array med korrekt kapacitet
3.
Kopiera över elementen i intervallet, från input-arrayen, till den nya arrayen
4.
Returnera referensen till den nya arrayen.
Skriv dessutom ett program som testar din lösning.
Uppgift 6
Skriv metoden
public int[] udda(int[] array)
vilken ska returnera en array som innehåller alla udda element i en input-array.
Om input-arrayen är {4, 3, 79, 55, 56, 34, 11, 17} så ska retur-arrayen vara {3, 79, 55, 11, 17}
Extrauppgift
Skriv ett program som simulerar 100000 kast med tre tärningar och som
skriver ut resultatet av kasten i tabellform. Vid varje kast så ska tärningarnas
siffersumma lagras. Detta sker med fördel i en array:
int[] siffersumma = new int[19];
där vardera facket summerar antalet förekomster av en speciell siffersumma.
Den minsta möjliga siffersumman är 3 och den största är 18.
Exempel:
Om tärningarna visar 8 prickar tillsammans så ska siffersumma[8] ökas med
ett.
Om tärningarna visar 18 prickar tillsammans så ska siffersumma[18] ökas
med ett.
Om du testar din metod bör den ge ett resultat liknande figuren till höger.
DA129A, Programmering 1
3
Malmö högskola
Teknik och samhälle
2007/2008
Förslag till lösningar
Uppgift 1
public void baklänges(int[] tal) {
for(int i=tal.length-1; i>=0; i--) {
System.out.print(tal[i]);
if(i>0) {
System.out.print(", ");
}
}
}
Uppgift 2
public int finns(int tal, int[] arrayMedTal) {
for(int i=0; i<arrayMedTal.length; i++) {
if(tal == arrayMedTal[i]) {
return i;
}
}
return -1;
}
Uppgift 3
public class Uppgift3 {
public void inmatning(int[] array) {
for(int i=0; i<array.length; i++) {
array[i] = extra.Input.readInt("Ange tal " + (i+1));
}
}
public void skrivTal(int[] array) {
System.out.print("Följande tal matades in: ");
for(int i=0; i<array.length; i++) {
System.out.print(array[i]);
if(i<array.length-1)
System.out.print(", ");
}
System.out.println();
}
public void skrivVartannat(int[] array) {
System.out.print("Vartannat tal: ");
for(int i=0; i<array.length; i+=2) {
System.out.print(array[i]);
if(i<array.length-2)
System.out.print(", ");
}
System.out.println();
}
public void program() {
Uppgift1 upp1 = new Uppgift1();
int[] heltal = new int[10];
inmatning(heltal);
skrivTal(heltal);
skrivVartannat(heltal);
System.out.print("Talen baklänges: ");
upp1.baklänges(heltal);
System.out.println();
}
public static void main(String[] args)
Uppgift3 upp3 = new Uppgift3();
upp3.program();
}
}
DA129A, Programmering 1
4
{
Malmö högskola
Teknik och samhälle
2007/2008
Uppgift 4
public double[] baklänges(double[] array) {
double[] nyArray = new double[array.length];
for(int i=0; i<array.length; i++) {
nyArray[i] = array[array.length-i-1];
}
return nyArray;
}
Uppgift 5
public double[] intervall(double[] array, double min, double max) {
int antal = 0, index=0;
double[] nyArray;
for(int i=0; i<array.length; i++) {
if((array[i]>=min) && (array[i]<=max))
antal++;
}
nyArray = new double[antal];
for(int i=0; i<array.length; i++) {
if((array[i]>=min) && (array[i]<=max)) {
nyArray[index] = array[i];
index++;
}
}
return nyArray;
}
Uppgift 6
public int[] udda(int[] array) {
int antal=0, index=0;
int[] nyArray;
for(int i=0; i<array.length; i++) {
if(array[i] % 2 == 1)
antal++;
}
nyArray = new int[antal];
for(int i=0; i<array.length; i++) {
if(array[i] % 2 == 1) {
nyArray[index] = array[i];
index++;
}
}
return nyArray;
}
DA129A, Programmering 1
5
Malmö högskola
Teknik och samhälle
2007/2008
Extrauppgift
package laboration12;
import extra.*;
public class Extrauppgift {
public int tärningskast() {
return (int)(Math.random()*6)+1;
}
public void kasta(int[] resultat, int antalKast) {
int tärning1, tärning2, tärning3;
for(int i=0; i<antalKast; i++) {
tärning1 = tärningskast();
tärning2 = tärningskast();
tärning3 = tärningskast();
resultat[tärning1+tärning2+tärning3]++;
}
}
public void skrivResultat(int[] resultat) {
System.out.println("Summa
Antal");
for(int i=3; i<resultat.length; i++) {
System.out.println(Output.format(i,5)+Output.format(resultat[i],8));
}
}
public void program() {
int[] siffersumma = new int[19];
kasta(siffersumma, 100000);
skrivResultat(siffersumma);
}
public static void main(String[] args) {
Extrauppgift e = new Extrauppgift();
e.program();
}
}
DA129A, Programmering 1
6