|
|
|
|
A vegades convé tenir un conjunt de dades, homogènies
(totes del mateix tipus) o no, agrupades sota un únic nom de variable.
Tots els llenguatges de programació tracten aquesta
qüestió d'una manera o altra i Java
ho fa de maneres diverses, des de la més simple (matrius)
fins a d'altres força sofisticades. Com és obvi, comencem
per les coses senzilles:
|
|
|
|
|
|
Matrius: |
|
|
|
|
|
Una matriu
(array,
en anglès) és (de moment) una tirallonga de n
dades, totes del mateix tipus, etiquetades des de la primera, amb
etiqueta l'enter 0, fins l'última, amb
l'etiqueta n-1. (De 0
a n-1 hi ha n nombres:
compta bé, si et plau!) |
|
|
|
|
|
Pots imaginar què passa a la memòria de la màquina
quan li demanem que guardi les paraules "Dilluns", "Dimarts",
"Dimecres", "Dijous", "Divendres"
, "Dissabte" i "Diumenge", ben endreçadetes,
amb el nom
exempleDeMatriu com a nom de variable:
- S'obren set forats, preparats per rebre,
cadascun d'ells, un objecte de tipus String
(una paraula, vaja).
- Cadascun dels forats rep una etiqueta,
del 0 al 6. Ara la màquina coneix tot el conjunt com a "exempleDeMatriu"
i cadascun dels elements com a "exempleDeMatriu[0]",
"exempleDeMatriu[1]", "exempleDeMatriu[2]",
etc., fins a "exempleDeMatriu[6]".
- Finalment, a cadascun dels forats, s'hi diposita l'objecte String
corresponent: "Dilluns" a exempleDeMatriu[0],
"Dimarts" a exempleDeMatriu[1],
etc.
|
|
|
Com es fa això? |
|
|
|
|
|
Hi ha diverses opcions.
La més curta és aquesta: es defineix la matriu (amb el tipus
String perquè és una matriu de paraules)
i en la mateixa línia ja se li assignen els valors, com hem fet moltes
vegades amb les variables. |
|
|
|
|
 |
String[] exempleDeMatriu={"Dilluns","Dimarts",
"Dimecres","Dijous",
"Divendres","Dissabte",
"Diumenge"};
|
|
|
|
|
|
|
que és útil
en determinats casos, però en molts menys d'allò que pugui
semblar a primera vista. Una altra seria aquesta: |
|
|
|
|
 |
//
"Avisem" al compilador que ve una matriu de paraules (strings)
String[] exempleDeMatriu;
// El compilador obre set espais per posar-hi
una paraula a
// cadascun d'ells
exempleDeMatriu=new String[7];
// Ara ja només cal omplir efectivament
aquests espais
exempleDeMatriu[0]="Dilluns";
exempleDeMatriu[1]="Dimarts";
exempleDeMatriu[2]="Dimecres";
exempleDeMatriu[3]="Dijous";
exempleDeMatriu[4]="Divendres";
exempleDeMatriu[5]="Dissabte";
exempleDeMatriu[6]="Diumenge"; |
|
|
|
|
|
|
Fem-ho funcionar! |
|
|
|
|
|
 |
Posem ara tot això
en funcionament. Crea un nou projecte que es digui Matrius
i, en aquest projecte, crea la classe MatriusDeParaules
amb aquest codi: |
|
|
|
|
|
/**
* Manipulació elemental de matrius I.
*
* @author Carles Romero
* @version 2004/02/06
*/
public class MatriusDeParaules {
/**
* Una matriu amb els noms dels dies
de la setmana
en català.
*/
String[] diesDeLaSetmana={"Dilluns","Dimarts","Dimecres",
"Dijous","Divendres","Dissabte",
"Diumenge"};
}
|
|
|
|
|
|
|
Ara la compiles i,
després, crea un objecte d'aquesta classe. El nom que, per a aquest
objecte proposa
ja va bé: |
|
|
|
|
|
|
|
|
|
|
|
Ara inspeccionarem
l'objecte |
|
|
|
|
|
|
|
|
|
|
|
i, com és d'esperar, només hi haurà la variable
diesDeLaSetmana, la qual podem, també,
inspeccionar:
|
|
|
|
|
|
|
|
|
|
|
|
veure'n la longitud
(length), que és 7, i què
hi ha a cadascun dels seus set espais: |
|
|
|
|
|
|
|
|
|
|
|
Tot remenant una
matriu... |
|
|
|
|
|
Fins aquí,
la nostra classe MatriusDeParaules només és un dipòsit
de dades estàtic, mort... Cal incorporar-hi alguns mètodes
per fer-la més interessant.. |
|
|
|
|
|
Comencem amb un mètode
que ens permetrà recuperar què hi ha a qualsevol dels set
espais. Afegeix aquest codi a sota de la definicio de diesDeLaSetmana: |
|
|
|
|
 |
/**
* Manipulació elemental de matrius I.
*
* @author Carles Romero
* @version 2004/02/06
*/
public class MatriusDeParaules {
/**
* Una matriu amb els noms dels dies
de la setmana en català.
*/
String[] diesDeLaSetmana={"Dilluns","Dimarts","Dimecres",
"Dijous","Divendres","Dissabte",
"Diumenge"};
|
/**
* Mètode que retorna què
hi ha a la matriu diesDeLaSetmana,
* element per element
* @param n la posició de la qual
demanem què hi ha
* @return la paraula que hi ha a la
posició n
*/
public String queHiHa (int n) {
return diesDeLaSetmana[n];
}
|
}
|
|
|
|
|
|
|
Ara, com abans, torna
a compilar i crea un objecte de la classe MatriusDeParaules.
Però ara executa el mètode que acabes d'implementar: |
|
|
|
|
|
|
|
|
|
|
|
Com que el mètode
String queHiHa(int n) necessita el paràmetre
enter n per executar-se, BlueJ
te'l demana: |
|
|
|
|
|
|
|
|
|
|
|
I, en acceptar, et
retorna (return) el String que ocupa el quart
lloc (índex 3!) a la matriu diesDeLaSetmana: |
|
|
|
|
|
|
|
|
|
|
|
Què passa
si demanes un índex inexistent, posem un 8,
quan els índexs van de 0 a 6?
Provem-ho: torna a demanar l'execució del mètode String
queHiHa(int n), però ara posa-li un 8 com a paràmetre. |
|
|
|
|
|
|
|
|
|
|
|
La Màquina
Virtual de Java
ha vist que no podia complir l'ordre i escup una excepció
ArrayIndexOutOfBoundsException (que és
més o menys "Excepció d'Index de la Matriu Fora de
Límits"). Llavors,
la capta, t'ensenya la línia de codi on hi ha hagut l'error
(línia 23, en gris) i et mostra l'excepció i el valor que
l'ha produït (8). |
|
|
|
|
 |
Aquests errors són
errors en temps d'execució
i el compilador no els pot detectar: el teu programa pot tenir la sintaxi
absolutament correcta però estar farcit d'errors d'aquesta mena! |
|
|
|
|
|
Ara canviem-hi coses... |
|
|
|
|
|
|
Ara farem per canviar
les paraules que hi ha enmagatzemades a la matriu diesDeLaSetmana.
Afegeix aquest nou mètode a la classe MatriusDeParaules: |
|
|
|
|
 |
/**
* Manipulació elemental de matrius I.
*
* @author Carles Romero
* @version 2004/02/06
*/
public class MatriusDeParaules {
/**
* Una matriu amb els noms dels dies
de la setmana en català.
*/
String[] diesDeLaSetmana={"Dilluns","Dimarts","Dimecres",
"Dijous","Divendres","Dissabte",
"Diumenge"};
/**
* Mètode que retorna què
hi ha a la matriu diesDeLaSetmana,
* element per element
* @param n la posició de la
qual demanem què hi ha
* @return la paraula que hi ha a la
posició n
*/
public String queHiHa (int n) {
return diesDeLaSetmana[n];
}
|
/**
* Mètode que posa una paraula
a una certa posició de la
* matriu diesDeLaSetmana.
* @param paraula la paraula que volem
posar
* @param n la posició en la qual
la volem posar
*/
public void posaParaula (String paraula,int
n) {
diesDeLaSetmana[n]=paraula;
}
|
} |
|
|
|
|
|
|
Compila, crea un
objecte de la classe MatriusDeParaules i demana
el mètode void posaParaula (String paraula,int
n): |
|
|
|
|
|
|
|
|
|
|
|
Ara són dos
paràmetres: la paraula (que, com que és un String,
has de posar entre cometes!) i la posició. I com que el mètode
és void, no ens retorna res: BlueJ
traga la paraula i no ens diu res més... |
|
|
|
|
|
Però la feina
ja està feta: podem inspeccionar l'objecte, com abans, i la seva
matriu diesDeLaSetmana: |
|
|
|
|
|
|
|
|
|
|
|
o bé executar
el mè |