JAVA predavanje 9

Inicializacija dvodimenzionalne tabele s seznamom vrednosti:

1
double[][] od = {{1312.58, 1288.11, ..., 1291.20}, {1311.00, ..., 1310.25}};


Tri in večdimenzionalne tabele


Število dimenzij ni omejeno.

1. Pri deklaraciji tabele navedemo toliko parov oglatih oklepajev, kolikor je dimenzij in specificiramo za vsako dimenzijo dejansko število elementov.

2. Vsak element ima toliko indeksov, kolikor ima dimenzij.

3. Za sprehod po tabeli je potrebno toliko zank, kolikor je dimenzij.

1
2
3
4
5
6
int[][][] t = new int[5][7][3]
 
for(int i = 0; i < t.length; i++)
	 for(int j = 0; j < t[i].length; j++)
		for(int k = 0; k < t[i][j].length; k++)
			obdelaj element t[i][j][k]



Dva praktična primera:
  • za dvodimenzionalno tabelo – računanje razdalj med točkami v dvodimenzionalnem prostoru (koordinatni sistem)
  • za tridimenzionalno tabelo – znanstvena konferenca

 

Računanje razdalj


5 točk, za vsako točko poznamo koordinate.

Razdaljo bomo računali po pitagorovem izreku.

dx = xi - xj

dy = yi – yj

rij = √(dx² + dy²)


Predstavitev podatkov o razdaljah

dvodimenzionalna tabela r, ki ima toliko vrstic in toliko stolpcev, kolikor je točk.

public class Razdalje{
	static final int ST_TOCK = 5;
	static double[] x = new double[ST_TOCK];
	static double[] y = new double[ST_TOCK];
	static double[][] r = new double[ST_TOCK][ST_TOCK];
 
	public static void main(String[] args){
		preberiKoordinate();
		izracunajRazdalje();
		izpisiRazdalje();
}
 
public static void preberiKoordinate(){
	for(int i = 0; i < ST_TOCK; i++){
		System.out.print(»Koordinata x » + (i+1) + ». tocke:«);
		x[i] = BranjePodatkov.preberiDouble();
		System.out.print(»Koordinata y » + (i+1) + ». tocke:«);
		y[i] = BranjePodatkov.preberiDouble();
        }
}
 
public static void izracunajRazdalje(){
	for(int i = 0; i<ST_TOCK; i++)
		for(int j = 0, j<=i; j++)
			if(i==j)		//element se nahaja na diagonali
				r[i][j]=0;
			else{
				double dx = x[i] – x[j];
				double dy = y[i] – y[j];
				r[i][j] = Math.sqrt(dx*dx + dy*dy);
				r[j][i] = r[i][j];
                        }
}
 
public static void izpisiRazdalje(){
	for(int i = 0; i<ST_TOCK; i++){
		for(int j = 0; j<ST_TOCK; j++)
			System.out.printf(»%10.2f«, r[i][j]);
		System.out.println();
                }
        }
}
 

 




Tridimenzionalna tabela s podatki o prispevkih na mednarodnih znanstveni konferenci.

1. dimenzija ustreza državam (25 držav)
2. dimenzija ustreza vrstam prispevkov (referati, kratki referati, posterji)
3. dimenzija ustreza področjem (5 področij)

 

 

Napišite metode:

  • skupajPrispevkov, ki vrne skupno število prispevkov
  • prispevkovPoVrsti, ki vrne tabelo s skupnim številom prispevkov vsake vrste
  • podrocjeZNajvecPrispevki, ki vrne indeks področja z največjim številom prispevkov



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public static int skupajPrispevkov(int[][][] p){
	int vsota = 0;
	//zanka za prvo dimenzijo (države)
        for(int d = 0; d<p.length; d++)	
		//zanka za drugo dimenzijo (vrste prispevkov)
                for(int v = 0; v<p[d].length; v++)	
			//zanka za tretjo dimenzijo (področja)
                        for(int pod = 0; pod<p[d][v].length; pod++)		
				vsota += p[d][v][pod];
	return vsota;
}
 
public static int[] prispevkovPoVrsti(int[][][] p){
	// Deklaracija tabele, ki jo metoda vrne, kot rezultat
	// p[0].length je dolžina tabele p v 2. dimenziji
        int[] r = new int[p[0].length];		
	//zanka za 2. dimenzijo
        for(int v = 0; v<p[0].length; v++){		
		r[v] = 0;
		// zanka za 1. dimenzijo
                for(int d = 0; d<p.length; d++)	
			//zanka za 3. dimenzijo
                        for(int pod = 0; pod<p[d][v]; pod++)	
				r[v] += p[d][v][pod];
        }
        return r;
}
 
public static int podrocjeZNajvecPrispevki(int[][][] p){
	//inicializacija spremenljivk, ki so potrebne za iskanje minimuma
        int maxVsota = 0;	
	int indeks = 0;
	//zanka za 3. dimenzijo
	for(int pod = 0; pod<p[0][0].length; pod++){ 
		//izračun skupnega števila prispevkov
		int vsota = 0;
		// po preostalih 2. dimenzijam seštejem vse elemente
		//zanka po 1. dimenziji
                for(int d = 0; d<p.length; d++)	
			//zanka po 2. dimenziji
                        for(int v = 0; v<=p[d].length; v++)	
				vsota += p[d][v][pod];
		//če je vsota večja od trenutnega maksimuma (maxVsota) moramo
//popraviti maxVsota in indeks
if(vsota > maxVsota){ maxVsota = vsota; indeks = pod; }   } return indeks; }

 

 




p.length: število elementov v 1. dimenziji
p[i].length : število elementov v 2. dimenziji
p[i][j].length: število elementov v 3. dimenziji
Vsi vodiči so na voljo BREZPLAČNO!
Pišite mi

Želite mnenje ali pomoč pri vašem projektu?

Pišite mi in bom pomagal, kakor bom v tistem trenutku lahko.