La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl.

Presentazioni simili


Presentazione sul tema: "Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl."— Transcript della presentazione:

1 Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl

2 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Nozioni di base Spesso il programmatore deve poter rappresentare un gruppo di valori come elenco L'elenco può essere unidimensionale o multidimensionale Java fornisce le classi per array e insiemi Vediamo prima gli array

3 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Terminologia di base L'elenco è composto di elementi Gli elementi in un elenco hanno un nome comune L'elenco è referenziato attraverso il nome comune Gli elementi dell'elenco sono dello stesso tipo (il tipo di base) Gli elementi di un elenco sono referenziati indicizzando il nome comune

4 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Funzioni degli array Java Gli indici sono indicati come espressioni tra parentesi quadre: [ ] Il tipo di base può essere qualsiasi tipo La dimensione dell'array può essere specificata in fase di esecuzione Il tipo dell'indice è intero e l'intervallo deve essere 0 … n-1 Dove n è il numero di elementi Controllo automatico dei confini Assicura che qualsiasi riferimento a un elemento dell'array sia valido La lunghezza del campo dati specifica il numero di elementi nell'elenco L'array è un oggetto Presenta funzioni comuni a tutti gli altri oggetti

5 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Stili di definizione delle variabili array Senza inizializzazione Tipo dei valori dell'elenco Le parentesi quadre caratterizzano la definizione di una variabile array Nome dell'elenco

6 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Stili di definizione delle variabili array Con inizializzazione Espressione intera non negativa che specifica il numero di elementi dell'array Riferimento a un nuovo array di n elementi

7 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Esempio Definizioni char[] c; int[] value = new int[10]; Provoca La variabile oggetto c non è inizializzata La variabile oggetto array v fa riferimento a un nuovo elenco di dieci elementi interi Ogni intero è inizializzato per impostazione predefinita a 0

8 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = Integer.parseInt(stdin.readLine());

9 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = Integer.parseInt(stdin.readLine());

10 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = Integer.parseInt(stdin.readLine());

11 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = Integer.parseInt(stdin.readLine());

12 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = Integer.parseInt(stdin.readLine());

13 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = Integer.parseInt(stdin.readLine());

14 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = Integer.parseInt(stdin.readLine()); Viene visualizzato 8

15 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = Integer.parseInt(stdin.readLine()); Si supponga di estrarre 3

16 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare Segmento int[] b = new int[100]; b[-1] = 0; b[100] = 0; Provoca La variabile array fa riferimento a un nuovo elenco di 100 interi Ogni elemento è inizializzato a 0 Due eccezioni da lanciare -1 non è un indice valido (troppo piccolo) 100 non è un indice valido (troppo grande) IndexOutOfBoundsException

17 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare Point[] p = new Point[3]; p[0] = new Point(0, 0); p[1] = new Point(1, 1); p[2] = new Point(2, 2); p[0].setX(1); p[1].setY(p[2].getY()); Point vertex = new Point(4,4); p[1] = p[0]; p[2] = vertex;

18 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare Point[] p = new Point[3]; p[0] = new Point(0, 0); p[1] = new Point(1, 1); p[2] = new Point(2, 2); p[0].setX(1); p[1].setY(p[2].getY()); Point vertex = new Point(4,4); p[1] = p[0]; p[2] = vertex;

19 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare Point[] p = new Point[3]; p[0] = new Point(0, 0); p[1] = new Point(1, 1); p[2] = new Point(2, 2); p[0].setX(1); p[1].setY(p[2].getY()); Point vertex = new Point(4,4); p[1] = p[0]; p[2] = vertex;

20 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare Point[] p = new Point[3]; p[0] = new Point(0, 0); p[1] = new Point(1, 1); p[2] = new Point(2, 2); p[0].setX(1); p[1].setY(p[2].getY()); Point vertex = new Point(4,4); p[1] = p[0]; p[2] = vertex;

21 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare Point[] p = new Point[3]; p[0] = new Point(0, 0); p[1] = new Point(1, 1); p[2] = new Point(2, 2); p[0].setX(1); p[1].setY(p[2].getY()); Point vertex = new Point(4,4); p[1] = p[0]; p[2] = vertex;

22 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare Point[] p = new Point[3]; p[0] = new Point(0, 0); p[1] = new Point(1, 1); p[2] = new Point(2, 2); p[0].setX(1); p[1].setY(p[2].getY()); Point vertex = new Point(4,4); p[1] = p[0]; p[2] = vertex;

23 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Considerare Point[] p = new Point[3]; p[0] = new Point(0, 0); p[1] = new Point(1, 1); p[2] = new Point(2, 2); p[0].setX(1); p[1].setY(p[2].getY()); Point vertex = new Point(4,4); p[1] = p[0]; p[2] = vertex;

24 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Inizializzazione esplicita Sintassi id fa riferimento a un array di n elementi. id[0] ha valore exp 0, id[1] ha valore exp 1 e così via Ogni elemento exp è un'espressione che dà un risultato di tipo ElementType

25 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Inizializzazione esplicita Esempio String[] puppy = "nilla, darby, "galen", "panther" }; int[] unit = 1 }; Equivale a String[] puppy = new String[4]; puppy[0] = "nilla"; puppy[1] = darby"; puppy[2] = "galen"; puppy[4] = "panther"; int[] unit = new int[1]; unit[0] = 1;

26 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Membri dell'array Lunghezza del membro Dimensione dell'array for (int i = 0; i < puppy.length; ++i) { System.out.println(puppy[i]); }

27 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Membri dell'array Membro clone() Produce una copia Point[] u = new Point(0, 0), new Point(1, 1)}; Point[] v = u.clone(); v[1] = new Point(4, 30);

28 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Membri dell'array Membro clone() Produce una copia Point[] u = new Point(0, 0), new Point(1, 1)}; Point[] v = u.clone(); v[1] = new Point(4, 30);

29 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Membri dell'array Membro clone() Produce una copia Point[] u = new Point(0, 0), new Point(1, 1)}; Point[] v = u.clone(); v[1] = new Point(4, 30);

30 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Creazione di una copia approfondita Esempio Point[] w = new Point[u.length]; for (int i = 0; i < u.length; ++i) { w[i] = u[i].clone(); }

31 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Creazione di una copia approfondita

32 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else { System.out.println(key + " is not in the list"); }

33 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else{ System.out.println(key + " is not in the list"); }

34 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else { System.out.println(key + " is not in the list"); }

35 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else { System.out.println(key + " is not in the list"); }

36 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else { System.out.println(key + " is not in the list"); }

37 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else { System.out.println(key + " is not in the list"); }

38 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else{ System.out.println(key + " is not in the list"); }

39 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else{ System.out.println(key + " is not in the list"); }

40 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else{ System.out.println(key + " is not in the list"); }

41 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else{ System.out.println(key + " is not in the list"); }

42 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else{ System.out.println(key + " is not in the list"); }

43 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else{ System.out.println(key + " is not in the list"); }

44 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca di un valore System.out.println("Enter search value (number): "); int key = Integer.parseInt(stdin.readLine()); int i; for (i = 0; i < data.length; ++i) { if (key == data[i]) { break; } if (i != data.length) { System.out.println(key + " is the " + I + "-th element"); } else{ System.out.println(key + " is not in the list"); }

45 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ricerca del valore minimo Segmento int minimumSoFar = sample[0]; for (int i = 1; i < sample.length; ++i) { if (sample[i] < minimumSoFar) { minimumSoFar = sample[i]; }

46 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Method sequentialSearch() di ArrayTools.java public static int sequentialSearch(int[] data, int key) { for (int i = 0; i < data.length; ++i) if (data[i] == key) return i; } return -1; } Considerare int[] score = 6, 9, 82, 11, 29, 85, 11, 28, 91 }; int i1 = sequentialSearch(score, 11); int i2 = sequentialSearch(score, 30);

47 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Method sequentialSearch() di ArrayTools.java public static int sequentialSearch(int[] data, int key) { for (int i = 0; i < data.length; ++i) if (data[i] == key) return i; } return -1; } Considerare int[] score = 6, 9, 82, 11, 29, 85, 11, 28, 91 }; int i1 = sequentialSearch(score, 11); int i2 = sequentialSearch(score, 30);

48 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Method putList() di ArrayTools.java public static void putList(int[] data) for (int i = 0; i < data.length; ++i) System.out.println(data[i]); } Considerare int[] score = 6, 9, 82, 11, 29, 85, 11, 28, 91 }; putList(score);

49 public static int[] getList() throws IOException { BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); int[] buffer = new int[MAX_LIST_SIZE]; int listSize = 0; for (int i = 0; i < MAX_LIST_SIZE; ++i) { String v = stdin.readLine(); if (v != null) { int number = Integer.parseInt(v); buffer[i] = number; ++listSize; } else{ break; } int[] data = new int[listSize]; for (int i = 0; i < listSize; ++i) { data[i] = buffer[i]; } return data; } Metodo getList() di ArrayTools.java

50 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl ArrayTools.java - struttura public class ArrayTools { // costante di classe private static final int MAX_LIST_SIZE = 1000; // sequentialSearch(): cerca una chiave in un elenco non ordinato public static int binarySearch(int[] data, int key)... // valueOf(): produce una rappresentazione stringa public static void putList(int[] data)... // getList(): estrae e restituisce fino a MAX_LIST_SIZE valori public static int[] getList() throws IOException... // reverse(): inverte l'ordine dei valori degli elementi public static void reverse(int[] list)... // binarySearch(): cerca una chiave in un elenco ordinato public static int binarySearch(char[] data, char key)... }

51 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Demo.java import java.io.*; public class Demo { // main(): punto di ingresso per l'applicazione public static void main(String[] args) throws IOException { System.out.println(""); System.out.println("Enter list of integers:"); int[] number = ArrayTools.getList(); System.out.println(""); System.out.println("Your list"); ArrayTools.putList(number); ArrayTools.reverse(number); System.out.println(""); System.out.println("Your list in reverse"); ArrayTools.putList(number); System.out.println(); }

52

53 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento Problema Disporre gli elementi in modo che siano ordinati secondo uno schema desiderato Lo standard è l'ordine non decrescente Perché non dire ordine crescente? Attività principali Confronto degli elementi Aggiornamento o spostamento degli elementi

54 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento per selezione Base dell'algoritmo All'iterazione i, un metodo di ordinamento per selezione Trova l'elemento contenente l'iesimo valore più piccolo del suo elenco v e scambia quell'elemento con v[i] Esempio - iterazione 0 Scambia l'elemento più piccolo con v[0] Provoca lo spostamento nella posizione corretta per un risultato ordinato del più piccolo elemento

55 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento per selezione Base dell'algoritmo All'iterazione i, un metodo di ordinamento per selezione Trova l'elemento contenente l'iesimo valore più piccolo del suo elenco v e scambia quell'elemento con v[i] Esempio - iterazione 0 Scambia l'elemento più piccolo con v[0] Provoca lo spostamento nella posizione corretta per un risultato ordinato del più piccolo elemento

56 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento per selezione Base dell'algoritmo All'iterazione i, un metodo di ordinamento per selezione Trova l'elemento contenente l'iesimo valore più piccolo del suo elenco v e scambia quell'elemento con v[i] Esempio - iterazione 1 Scambia il secondo elemento più piccolo con v[1] Provoca lo spostamento nella posizione corretta per un risultato ordinato del secondo elemento più piccolo

57 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento per selezione Base dell'algoritmo All'iterazione i, un metodo di ordinamento per selezione Trova l'elemento contenente l'iesimo valore più piccolo del suo elenco v e scambia quell'elemento con v[i] Esempio - iterazione 1 Scambia il secondo elemento più piccolo con v[1] Provoca lo spostamento nella posizione corretta per un risultato ordinato del secondo elemento più piccolo

58 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento per selezione ArrayTools.java public static void selectionSort(char[] v) { for (int i = 0; i < v.length-1; ++i) { // intuisce la posizione dell'iesimo elemento più piccolo int guess = i; for (int j = i+1; j < v.length; ++j) { if (v[j] < v[guess]) // intuizione corretta? ? // aggiorna guess all'indice dell'elemento più piccolo guess = j; } // guess è corretto, quindi scambia gli elementi char rmbr = v[i]; v[i] = v[guess]; v[guess] = rmbr; }

59 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Iterazione i // intuisce la posizione dell'iesimo elemento più piccolo int guess = i; for (int j = i+1; j < v.length; ++j) { if (v[j] < v[guess]) // l'intuizione è giusta? // aggiorna guess all'indice dell'elemento più piccolo guess = j; } // ora guess è corretto, scambia gli elementi v[guess] e v[0]

60 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Array multidimensionali Molti problemi richiedono di organizzare le informazioni come elenco bidimensionale o multidimensionale Esempi Matrici Animazione grafica Modelli di previsione economica Rappresentazione di mappe Studi temporali sui cambiamenti della popolazione Progettazione di microprocessori

61 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Esempio Segmento int[][] m = new int[3][]; m[0] = new int[4]; m[1] = new int[4]; m[2] = new int[4]; Produce

62 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Esempio Segmento for (int r = 0; r < m.length; ++r) { for (int c = 0; c < m[r].length; ++c) { System.out.print("Enter a value: "); m[r][c] = Integer.parseInt(stdin.readLine()); }

63 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Esempio Segmento String[][] s = new String[4][]; s[0] = new String[2]; s[1] = new String[2]; s[2] = new String[4]; s[3] = new String[3]; Produce

64 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Esempio Segmento int c[][] = 1, 2, 3, 4, 5, 6, 7, 8, 9}}; Produce

65 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Matrici Un array bidimensionale a volte è conosciuto come matrice perché ricorda quel concetto matematico Una matrice con m righe e n colonne è rappresentata matematicamente nel modo seguente

66 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Somma di matrici Definizione C = A + B c ij = a 1i b 1j + a i2 b 2j +... + a in b nj c ij è la somma di termini prodotta dalla moltiplicazione degli elementi della riga i di a con quelli della colonna c di b

67 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Somma di matrici public static double[][] add(double[][] a, double[][] b) { // determina il numero di righe nella soluzione int m = a.length; // determina il numero di colonne nella soluzione int n = a[0].length; // crea l'array per contenere la somma double[][] c = new double[m][n]; // calcola la somma della matrice riga per riga for (int i = 0; i < m; ++i) { // produce la riga corrente for (int j = 0; j < n; ++j) { c[i][j] = a[i][j] + b[i][j]; } return c; }


Scaricare ppt "Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl."

Presentazioni simili


Annunci Google