SlideShare uma empresa Scribd logo
1 de 104
Baixar para ler offline
Aula 10 – Arranjos
Norton Trevisan Roman
19 de mar¸co de 2020
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 1 / 38
Arranjos
Considere o c´odigo
para calcular o valor
da piscina:
Qual o problema?
static double valorPiscina(
double area, int material) {
double valor;
switch (material) {
case ALVENARIA:
return(area*1500);
case VINIL: return(area*1100);
case FIBRA: return(area*750);
case PLASTICO: return(area*500);
default: return(-1);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 2 / 38
Arranjos
Considere o c´odigo
para calcular o valor
da piscina:
Qual o problema?
Todos os pre¸cos est˜ao
declarados dentro do
m´etodo
Se o c´odigo crescer,
fica mais dif´ıcil achar,
em caso de mudan¸ca
static double valorPiscina(
double area, int material) {
double valor;
switch (material) {
case ALVENARIA:
return(area*1500);
case VINIL: return(area*1100);
case FIBRA: return(area*750);
case PLASTICO: return(area*500);
default: return(-1);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 2 / 38
Arranjos
Considere o c´odigo
para calcular o valor
da piscina:
Qual o problema?
Todos os pre¸cos est˜ao
declarados dentro do
m´etodo
Se o c´odigo crescer,
fica mais dif´ıcil achar,
em caso de mudan¸ca
Que fazer?
static double valorPiscina(
double area, int material) {
double valor;
switch (material) {
case ALVENARIA:
return(area*1500);
case VINIL: return(area*1100);
case FIBRA: return(area*750);
case PLASTICO: return(area*500);
default: return(-1);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 2 / 38
Arranjos
Poder´ıamos agrupar
essa informa¸c˜ao, sob
a forma de
constantes
/* materiais da piscina */
static final int ALVENARIA = 0;
static final int VINIL = 1;
static final int FIBRA = 2;
static final int PLASTICO = 3;
/* pre¸cos dos materiais */
static final double
P_ALVENARIA = 1500;
static final double P_VINIL = 1100;
static final double P_FIBRA = 750;
static final double
P_PLASTICO = 500;
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 3 / 38
Arranjos
Poder´ıamos agrupar
essa informa¸c˜ao, sob
a forma de
constantes
Tornaria mais f´acil a
manuten¸c˜ao do
c´odigo
/* materiais da piscina */
static final int ALVENARIA = 0;
static final int VINIL = 1;
static final int FIBRA = 2;
static final int PLASTICO = 3;
/* pre¸cos dos materiais */
static final double
P_ALVENARIA = 1500;
static final double P_VINIL = 1100;
static final double P_FIBRA = 750;
static final double
P_PLASTICO = 500;
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 3 / 38
Arranjos
Poder´ıamos agrupar
essa informa¸c˜ao, sob
a forma de
constantes
Tornaria mais f´acil a
manuten¸c˜ao do
c´odigo
Basta?
/* materiais da piscina */
static final int ALVENARIA = 0;
static final int VINIL = 1;
static final int FIBRA = 2;
static final int PLASTICO = 3;
/* pre¸cos dos materiais */
static final double
P_ALVENARIA = 1500;
static final double P_VINIL = 1100;
static final double P_FIBRA = 750;
static final double
P_PLASTICO = 500;
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 3 / 38
Arranjos
Ainda temos que
relacion´a-las
static double valorPiscina(
double area, int material) {
double valor;
switch (material) {
case ALVENARIA: return(area*
P_ALVENARIA);
case VINIL: return(area*
P_VINIL);
case FIBRA: return(area*
P_FIBRA);
case PLASTICO: return(area*
P_PLASTICO);
default: return(-1);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 4 / 38
Arranjos
Ainda temos que
relacion´a-las
E como far´ıamos se
quis´essemos calcular
o pre¸co m´edio dos
materiais?
static double valorPiscina(
double area, int material) {
double valor;
switch (material) {
case ALVENARIA: return(area*
P_ALVENARIA);
case VINIL: return(area*
P_VINIL);
case FIBRA: return(area*
P_FIBRA);
case PLASTICO: return(area*
P_PLASTICO);
default: return(-1);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 4 / 38
Arranjos
(P_ALVENARIA + P_VINIL +
P_FIBRA + P_PLASTICO)/4
static double valorPiscina(
double area, int material) {
double valor;
switch (material) {
case ALVENARIA: return(area*
P_ALVENARIA);
case VINIL: return(area*
P_VINIL);
case FIBRA: return(area*
P_FIBRA);
case PLASTICO: return(area*
P_PLASTICO);
default: return(-1);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 5 / 38
Arranjos
(P_ALVENARIA + P_VINIL +
P_FIBRA + P_PLASTICO)/4
Deve haver um meio
melhor, que
mantenha o
agrupamento,
simplifique o c´odigo
e facilite esse tipo de
c´alculo
static double valorPiscina(
double area, int material) {
double valor;
switch (material) {
case ALVENARIA: return(area*
P_ALVENARIA);
case VINIL: return(area*
P_VINIL);
case FIBRA: return(area*
P_FIBRA);
case PLASTICO: return(area*
P_PLASTICO);
default: return(-1);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 5 / 38
Arranjos
Usamos Arranjos (Array):
Estruturas de dados, de tamanho fixo, que permitem
armazenar um conjunto de valores de um mesmo tipo
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 6 / 38
Arranjos
Usamos Arranjos (Array):
Estruturas de dados, de tamanho fixo, que permitem
armazenar um conjunto de valores de um mesmo tipo
Em vez
de termos
static final double P_ALVENARIA = 1500;
static final double P_VINIL = 1100;
static final double P_FIBRA = 750;
static final double P_PLASTICO = 500;
Podemos
fazer
static double[] precos = {1500, 1100, 750, 500};
ou
static double precos[] = {1500, 1100, 750, 500};
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 6 / 38
Arranjos
Deixou de
ser
constante
static final double P_ALVENARIA = 1500;
static final double P_VINIL = 1100;
static final double P_FIBRA = 750;
static final double P_PLASTICO = 500;
static double[] precos = {1500, 1100, 750, 500};
ou
static double precos[] = {1500, 1100, 750, 500};
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 7 / 38
Arranjos
Deixou de
ser
constante
Mas
deixou o
c´odigo
mais
enxuto
static final double P_ALVENARIA = 1500;
static final double P_VINIL = 1100;
static final double P_FIBRA = 750;
static final double P_PLASTICO = 500;
static double[] precos = {1500, 1100, 750, 500};
ou
static double precos[] = {1500, 1100, 750, 500};
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 7 / 38
Arranjos
static double[] precos = {1500, 1100, 750, 500};
diz ao compilador para reservar espa¸co na mem´oria
para 4 doubles
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 8 / 38
Arranjos
static double[] precos = {1500, 1100, 750, 500};
diz ao compilador para reservar espa¸co na mem´oria
para 4 doubles
Armazenando os valores 1500, 1100, 750, 500 neles
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 8 / 38
Arranjos
static double[] precos = {1500, 1100, 750, 500};
diz ao compilador para reservar espa¸co na mem´oria
para 4 doubles
Armazenando os valores 1500, 1100, 750, 500 neles
Por enquanto, digamos que o static est´a a´ı por
precos ser um atributo do programa...
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 8 / 38
Revendo a Mem´oria
O que acontece ao fazermos
float areaq;?
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 9 / 38
Revendo a Mem´oria
O que acontece ao fazermos
float areaq;?
areaq
0xff1
Alocamos um espa¸co para a vari´avel areaq grande
o suficiente para guardar um float (4B), e cujo
endere¸co o compilador conhece (o 0xff1 na figura)
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 9 / 38
Revendo a Mem´oria
O que acontece ao fazermos
float areaq;?
areaq
0xff1
Alocamos um espa¸co para a vari´avel areaq grande
o suficiente para guardar um float (4B), e cujo
endere¸co o compilador conhece (o 0xff1 na figura)
Qualquer valor para areaq ´e armazenado
diretamente nesse espa¸co – Armazena o valor
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 9 / 38
Revendo a Mem´oria
Endere¸co?
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
Revendo a Mem´oria
Endere¸co?
Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de
mem´oria que h´a – seu endere¸co
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
Revendo a Mem´oria
Endere¸co?
Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de
mem´oria que h´a – seu endere¸co
Normalmente em hexadecimal
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
Revendo a Mem´oria
Endere¸co?
Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de
mem´oria que h´a – seu endere¸co
Normalmente em hexadecimal
Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
Revendo a Mem´oria
Endere¸co?
Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de
mem´oria que h´a – seu endere¸co
Normalmente em hexadecimal
Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001
Bin´ario: 0, 1
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
Revendo a Mem´oria
Endere¸co?
Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de
mem´oria que h´a – seu endere¸co
Normalmente em hexadecimal
Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001
Bin´ario: 0, 1
Octal: 0, 1, . . . , 7. Em bin´ario, de 000 a 111
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
Revendo a Mem´oria
Endere¸co?
Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de
mem´oria que h´a – seu endere¸co
Normalmente em hexadecimal
Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001
Bin´ario: 0, 1
Octal: 0, 1, . . . , 7. Em bin´ario, de 000 a 111
Hexadecimal: 0, 1, . . . , 9, A, B, . . . , F. Em bin´ario, de 0000
a 1111
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
Revendo a Mem´oria
Endere¸co?
Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de
mem´oria que h´a – seu endere¸co
Normalmente em hexadecimal
Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001
Bin´ario: 0, 1
Octal: 0, 1, . . . , 7. Em bin´ario, de 000 a 111
Hexadecimal: 0, 1, . . . , 9, A, B, . . . , F. Em bin´ario, de 0000
a 1111
Note que tanto Octal quanto Hexa usam todos os bits a eles
alocados
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
Revendo a Mem´oria
No caso de float areaq, s˜ao
alocados 4B cont´ıguos na mem´oria,
sendo 0xff1 o endere¸co do primeiro
deles
areaq
0xff1
O compilador, para sua facilidade, deixa vocˆe dar
nomes a esses endere¸cos → s˜ao as vari´aveis
Os nomes das vari´aveis s˜ao, ent˜ao, o mapeamento
feito pelo compilador a esses endere¸cos
Um nome ou r´otulo dado a esse local de mem´oria
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 11 / 38
Revendo a Mem´oria
O programador n˜ao precisa saber qual
´e esse endere¸co
areaq
0xff1
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 12 / 38
Revendo a Mem´oria
O programador n˜ao precisa saber qual
´e esse endere¸co
areaq
0xff1
Diz-se que a informa¸c˜ao foi abstra´ıda:
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 12 / 38
Revendo a Mem´oria
O programador n˜ao precisa saber qual
´e esse endere¸co
areaq
0xff1
Diz-se que a informa¸c˜ao foi abstra´ıda:
Olha-se o problema sob um ˆangulo em que n˜ao h´a a
necessidade de se saber o valor desse endere¸co
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 12 / 38
Arranjos na Mem´oria
O que acontece ao
fazermos
double[] precos =
{1500, 1100, 750, 500};?
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 13 / 38
Arranjos na Mem´oria
O que acontece ao
fazermos
double[] precos =
{1500, 1100, 750, 500};?
0xff5
O compilador aloca espa¸co suficiente para 4 doubles
consecutivos (32B)
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 13 / 38
Arranjos na Mem´oria
O que acontece ao
fazermos
double[] precos =
{1500, 1100, 750, 500};?
0xff5
1500 1100 750 500
O compilador aloca espa¸co suficiente para 4 doubles
consecutivos (32B)
Guarda os valores da inicializa¸c˜ao l´a
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 13 / 38
Arranjos na Mem´oria
Em seguida aloca
mem´oria para a vari´avel
precos, grande o
suficiente para caber um
endere¸co, e cujo endere¸co
0xff5
1500 1100 750 500
precos
0x030
o compilador tamb´em conhece
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 14 / 38
Arranjos na Mem´oria
Em seguida aloca
mem´oria para a vari´avel
precos, grande o
suficiente para caber um
endere¸co, e cujo endere¸co
0xff5
1500 1100 750 500
precos
0x030
0xff5
o compilador tamb´em conhece
Ent˜ao guarda em precos o endere¸co na mem´oria
do primeiro byte do arranjo
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 14 / 38
Arranjos na Mem´oria
Em seguida aloca
mem´oria para a vari´avel
precos, grande o
suficiente para caber um
endere¸co, e cujo endere¸co
0xff5
1500 1100 750 500
precos
0x030
0xff5
o compilador tamb´em conhece
Ent˜ao guarda em precos o endere¸co na mem´oria
do primeiro byte do arranjo
Guarda o endere¸co → armazena uma referˆencia ao
in´ıcio do arranjo
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 14 / 38
Arranjos na Mem´oria
Para chegar ao primeiro
elemento do arranjo, o
computador:
0xff5
1500 1100 750 500
precos
0x030
0xff5
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
Arranjos na Mem´oria
Para chegar ao primeiro
elemento do arranjo, o
computador:
0xff5
1500 1100 750 500
precos
0x030
0xff5
Vai `a regi˜ao da mem´oria correspondente a pre¸cos
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
Arranjos na Mem´oria
Para chegar ao primeiro
elemento do arranjo, o
computador:
0xff5
1500 1100 750 500
precos
0x030
0xff5
Vai `a regi˜ao da mem´oria correspondente a pre¸cos
Lˆe seu conte´udo – endere¸co do primeiro byte do
arranjo
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
Arranjos na Mem´oria
Para chegar ao primeiro
elemento do arranjo, o
computador:
0xff5
1500 1100 750 500
precos
0x030
0xff5
Vai `a regi˜ao da mem´oria correspondente a pre¸cos
Lˆe seu conte´udo – endere¸co do primeiro byte do
arranjo
Vai ent˜ao a essa regi˜ao da mem´oria
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
Arranjos na Mem´oria
Para chegar ao primeiro
elemento do arranjo, o
computador:
0xff5
1500 1100 750 500
precos
0x030
0xff5
Vai `a regi˜ao da mem´oria correspondente a pre¸cos
Lˆe seu conte´udo – endere¸co do primeiro byte do
arranjo
Vai ent˜ao a essa regi˜ao da mem´oria e lˆe o conte´udo
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
Arranjos na Mem´oria
Em java, como podemos ler um elemento do
arranjo?
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 16 / 38
Arranjos na Mem´oria
Em java, como podemos ler um elemento do
arranjo?
Fazendo arranjo[indice]
Onde ´ındice ´e um inteiro de 0 a n − 1, com n sendo o
n´umero de elementos do arranjo
0 corresponde ao primeiro elemento, 1 ao segundo, etc
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 16 / 38
Arranjos na Mem´oria – Exemplo
public static void main(String[] args) {
System.out.println(precos[0]);
System.out.println(precos[1]);
System.out.println(precos[2]);
System.out.println(precos[3]);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 17 / 38
Arranjos na Mem´oria – Exemplo
public static void main(String[] args) {
System.out.println(precos[0]);
System.out.println(precos[1]);
System.out.println(precos[2]);
System.out.println(precos[3]);
}
Ou:
public static void main(String[] args) {
for (int i=0; i<4; i++) {
System.out.println(precos[i]);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 17 / 38
Arranjos na Mem´oria
Uma vez que o
´ındice pode ser
qualquer inteiro,
podemos melhorar a
legibilidade do
c´odigo
public static void main(String[]
args) {
for (int i=0; i<4; i++) {
System.out.println(precos[i]);
}
}
public static void main(String[]
args) {
for (int i=ALVENARIA; i<=PLASTICO;
i++) {
System.out.println(precos[i]);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 18 / 38
Arranjos na Mem´oria
Uma vez que o
´ındice pode ser
qualquer inteiro,
podemos melhorar a
legibilidade do
c´odigo
Repare no main...
String[] args
public static void main(String[]
args) {
for (int i=0; i<4; i++) {
System.out.println(precos[i]);
}
}
public static void main(String[]
args) {
for (int i=ALVENARIA; i<=PLASTICO;
i++) {
System.out.println(precos[i]);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 18 / 38
Arranjos na Mem´oria
Uma vez que o
´ındice pode ser
qualquer inteiro,
podemos melhorar a
legibilidade do
c´odigo
Repare no main...
String[] args
args tamb´em ´e um
arranjo
public static void main(String[]
args) {
for (int i=0; i<4; i++) {
System.out.println(precos[i]);
}
}
public static void main(String[]
args) {
for (int i=ALVENARIA; i<=PLASTICO;
i++) {
System.out.println(precos[i]);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 18 / 38
´Indices na Mem´oria
Como o computador faz para achar o elemento de
´ındice i do arranjo precos?
0xff5
1500 1100 750 500
precos
0x030
0xff5
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 19 / 38
´Indices na Mem´oria
Como o computador faz para achar o elemento de
´ındice i do arranjo precos?
Primeiro, vai `a regi˜ao da
mem´oria correspondente
a precos
0xff5
1500 1100 750 500
precos
0x030
0xff5
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 19 / 38
´Indices na Mem´oria
Como o computador faz para achar o elemento de
´ındice i do arranjo precos?
Primeiro, vai `a regi˜ao da
mem´oria correspondente
a precos
0xff5
1500 1100 750 500
precos
0x030
0xff5
Lˆe seu conte´udo – endere¸co do primeiro byte do
arranjo
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 19 / 38
´Indices na Mem´oria
Calcula ent˜ao a posi¸c˜ao
do elemento de ´ındice i: 0xff5
1500 1100 750 500
precos
0x030
0xff5
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 20 / 38
´Indices na Mem´oria
Calcula ent˜ao a posi¸c˜ao
do elemento de ´ındice i:
Sabendo que cada
elemento tem 8B
(double), e que
0 ≤ i ≤ n − 1
0xff5
1500 1100 750 500
precos
0x030
0xff5
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 20 / 38
´Indices na Mem´oria
Calcula ent˜ao a posi¸c˜ao
do elemento de ´ındice i:
Sabendo que cada
elemento tem 8B
(double), e que
0 ≤ i ≤ n − 1
0xff5
1500 1100 750 500
precos
0x030
0xff5
O elemento estar´a a 8 × i bytes do in´ıcio do arranjo
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 20 / 38
´Indices na Mem´oria
Calcula ent˜ao a posi¸c˜ao
do elemento de ´ındice i:
Sabendo que cada
elemento tem 8B
(double), e que
0 ≤ i ≤ n − 1
0xff5
1500 1100 750 500
precos
0x030
0xff5
O elemento estar´a a 8 × i bytes do in´ıcio do arranjo
O endere¸co ser´a 0xff5 + 8 × i
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 20 / 38
´Indices na Mem´oria
Vai `a regi˜ao da mem´oria
correspondente a esse
endere¸co e lˆe seu
conte´udo
0xff5
1500 1100 750 500
precos
0x030
0xff5
Por isso o ´ındice come¸ca no 0. Se i = 0, o endere¸co
visitado ser´a o do in´ıcio do arranjo
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 21 / 38
Arranjos
Voltemos agora a
valorPiscina...
static double valorPiscina(double
area, int material) {
switch (material) {
case ALVENARIA: return(area*
P_ALVENARIA);
case VINIL: return(area*
P_VINIL);
case FIBRA: return(area*
P_FIBRA);
case PLASTICO: return(area*
P_PLASTICO);
default: return(-1);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 22 / 38
Arranjos
Voltemos agora a
valorPiscina...
Como ficaria
usando o arranjo
precos?
static double valorPiscina(double
area, int material) {
switch (material) {
case ALVENARIA: return(area*
P_ALVENARIA);
case VINIL: return(area*
P_VINIL);
case FIBRA: return(area*
P_FIBRA);
case PLASTICO: return(area*
P_PLASTICO);
default: return(-1);
}
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 22 / 38
Arranjos
static double valorPiscina(double
area, int material) {
if (material<ALVENARIA ||
material>PLASTICO ||
area<0) return(-1);
return(area*precos[material]);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 23 / 38
Arranjos
Inclu´ımos o teste
para a ´area
static double valorPiscina(double
area, int material) {
if (material<ALVENARIA ||
material>PLASTICO ||
area<0) return(-1);
return(area*precos[material]);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 23 / 38
Arranjos
Inclu´ımos o teste
para a ´area
Usamos o c´odigo
do tipo do material
como ´ındice em
precos
static double valorPiscina(double
area, int material) {
if (material<ALVENARIA ||
material>PLASTICO ||
area<0) return(-1);
return(area*precos[material]);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 23 / 38
Arranjos
Inclu´ımos o teste
para a ´area
Usamos o c´odigo
do tipo do material
como ´ındice em
precos
static double valorPiscina(double
area, int material) {
if (material<ALVENARIA ||
material>PLASTICO ||
area<0) return(-1);
return(area*precos[material]);
}
´E importante certificar-se que precos[0] tem o
pre¸co de ALVENARIA, que precos[1] tem o pre¸co
de VINIL etc
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 23 / 38
Arranjos
Elementos em arranjos podem ser atribu´ıdos a
outras vari´aveis, como uma vari´avel comum:
double x = precos[0];
Desde que o tipo da vari´avel seja o mesmo do tipo
armazenado no arranjo
Do contr´ario, um type cast ser´a necess´ario
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 24 / 38
Arranjos
Elementos em arranjos podem ser atribu´ıdos a
outras vari´aveis, como uma vari´avel comum:
double x = precos[0];
Desde que o tipo da vari´avel seja o mesmo do tipo
armazenado no arranjo
Do contr´ario, um type cast ser´a necess´ario
E o que acontece se tentamos acessar um elemento
fora dos limites do arranjo?
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 24 / 38
Arranjos
C´odigo Sa´ıda
public static void main(String[]
args) {
double x = precos[-1];
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
Arranjos
C´odigo Sa´ıda
public static void main(String[]
args) {
double x = precos[-1];
}
$ javac AreaCasa
$ java AreaCasa
Exception in thread "main"
java.lang.ArrayIndexOutOfBounds
Exception: -1
at AreaCasa.main(AreaCasa.java:73)
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
Arranjos
C´odigo Sa´ıda
public static void main(String[]
args) {
double x = precos[-1];
}
$ javac AreaCasa
$ java AreaCasa
Exception in thread "main"
java.lang.ArrayIndexOutOfBounds
Exception: -1
at AreaCasa.main(AreaCasa.java:73)
public static void main(String[]
args) {
double x = precos[4];
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
Arranjos
C´odigo Sa´ıda
public static void main(String[]
args) {
double x = precos[-1];
}
$ javac AreaCasa
$ java AreaCasa
Exception in thread "main"
java.lang.ArrayIndexOutOfBounds
Exception: -1
at AreaCasa.main(AreaCasa.java:73)
public static void main(String[]
args) {
double x = precos[4];
}
$ javac AreaCasa
$ java AreaCasa
Exception in thread "main"
java.lang.ArrayIndexOutOfBounds
Exception: 4
at AreaCasa.main(AreaCasa.java:73)
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
Arranjos
C´odigo Sa´ıda
public static void main(String[]
args) {
double x = precos[-1];
}
$ javac AreaCasa
$ java AreaCasa
Exception in thread "main"
java.lang.ArrayIndexOutOfBounds
Exception: -1
at AreaCasa.main(AreaCasa.java:73)
public static void main(String[]
args) {
double x = precos[4];
}
$ javac AreaCasa
$ java AreaCasa
Exception in thread "main"
java.lang.ArrayIndexOutOfBounds
Exception: 4
at AreaCasa.main(AreaCasa.java:73)
Compilar´a... mas gerar´a erro ao executar
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
Arranjos
E como podemos dar um novo valor a um elemento
do arranjo?
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 26 / 38
Arranjos
E como podemos dar um novo valor a um elemento
do arranjo?
arranjo[´ındice] = novo_valor
precos[2] = 500;
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 26 / 38
Arranjos
E como podemos dar um novo valor a um elemento
do arranjo?
arranjo[´ındice] = novo_valor
precos[2] = 500;
Vimos que, para criar um arranjo, basta fazer
double[] precos = {1500, 1100, 750, 500};
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 26 / 38
Arranjos
E como podemos dar um novo valor a um elemento
do arranjo?
arranjo[´ındice] = novo_valor
precos[2] = 500;
Vimos que, para criar um arranjo, basta fazer
double[] precos = {1500, 1100, 750, 500};
Seria a ´unica maneira?
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 26 / 38
Arranjos
public static void main(String[]
args) {
double[] precos2 = new double[4];
precos2[ALVENARIA] = 1500;
precos2[VINIL] = 1100;
precos2[FIBRA] = 750;
precos2[PLASTICO] = 500;
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 27 / 38
Arranjos
Criamos um
arranjo de 4
elementos, todos
com valor zero
public static void main(String[]
args) {
double[] precos2 = new double[4];
precos2[ALVENARIA] = 1500;
precos2[VINIL] = 1100;
precos2[FIBRA] = 750;
precos2[PLASTICO] = 500;
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 27 / 38
Arranjos
Criamos um
arranjo de 4
elementos, todos
com valor zero
Inicializamos
ent˜ao esse arranjo
public static void main(String[]
args) {
double[] precos2 = new double[4];
precos2[ALVENARIA] = 1500;
precos2[VINIL] = 1100;
precos2[FIBRA] = 750;
precos2[PLASTICO] = 500;
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 27 / 38
Arranjos
double[] precos = {1500, 1100,
750, 500};
double[] precos2 =
new double[4];
precos2[ALVENARIA] = 1500;
precos2[VINIL] = 1100;
precos2[FIBRA] = 750;
precos2[PLASTICO] = 500;
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
Arranjos
double[] precos = {1500, 1100,
750, 500};
double[] precos2 =
new double[4];
precos2[ALVENARIA] = 1500;
precos2[VINIL] = 1100;
precos2[FIBRA] = 750;
precos2[PLASTICO] = 500;
´Util se conhecemos os
valores de antem˜ao
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
Arranjos
double[] precos = {1500, 1100,
750, 500};
double[] precos2 =
new double[4];
precos2[ALVENARIA] = 1500;
precos2[VINIL] = 1100;
precos2[FIBRA] = 750;
precos2[PLASTICO] = 500;
´Util se conhecemos os
valores de antem˜ao
E se esses valores s˜ao
poucos
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
Arranjos
double[] precos = {1500, 1100,
750, 500};
double[] precos2 =
new double[4];
precos2[ALVENARIA] = 1500;
precos2[VINIL] = 1100;
precos2[FIBRA] = 750;
precos2[PLASTICO] = 500;
´Util se conhecemos os
valores de antem˜ao
E se esses valores s˜ao
poucos
´Util se n˜ao conhecemos
os valores de antem˜ao
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
Arranjos
double[] precos = {1500, 1100,
750, 500};
double[] precos2 =
new double[4];
precos2[ALVENARIA] = 1500;
precos2[VINIL] = 1100;
precos2[FIBRA] = 750;
precos2[PLASTICO] = 500;
´Util se conhecemos os
valores de antem˜ao
E se esses valores s˜ao
poucos
´Util se n˜ao conhecemos
os valores de antem˜ao
Ou se esses valores s˜ao
muitos
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
Arranjos
Arranjos podem ser criados de qualquer tipo no
java:
tipo[] nomeDaVariavel = new tipo[tamanho do
arranjo]
Em que tamanho do arranjo ´e o n´umero de
elementos que ele conter´a
Seus ´ındices variando de 0 a tamanho − 1
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 29 / 38
Arranjos
Ex:
float[] precos2 = new float[4];
double[] precos2 = new double[4];
int[] tamanhos = new int[10];
long[] tamanhos = new long[10];
boolean[] comprados = new boolean[20];
etc (veremos mais adiante)
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 30 / 38
Arranjos
Vamos calcular o pre¸co
m´edio dos materiais de
nossa piscina
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 31 / 38
Arranjos
Vamos calcular o pre¸co
m´edio dos materiais de
nossa piscina
Como fazer?
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 31 / 38
Arranjos
Vamos calcular o pre¸co
m´edio dos materiais de
nossa piscina
Como fazer?
Somando todos os pre¸cos,
e dividindo pelo n´umero
deles
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 31 / 38
Arranjos
Vamos calcular o pre¸co
m´edio dos materiais de
nossa piscina
Como fazer?
Somando todos os pre¸cos,
e dividindo pelo n´umero
deles
public static void main(
String[] args) {
double media = 0;
for (int i=0; i<4; i++) {
media += precos[i];
}
media = media/4;
System.out.println(media);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 31 / 38
Arranjos
Funciona... mas e se
tivermos que aumentar
o tamanho do arranjo?
public static void main(
String[] args) {
double media = 0;
for (int i=0; i<4; i++) {
media += precos[i];
}
media = media/4;
System.out.println(media);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 32 / 38
Arranjos
Funciona... mas e se
tivermos que aumentar
o tamanho do arranjo?
Teremos que mudar o
limite do for tamb´em
public static void main(
String[] args) {
double media = 0;
for (int i=0; i<4; i++) {
media += precos[i];
}
media = media/4;
System.out.println(media);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 32 / 38
Arranjos
Funciona... mas e se
tivermos que aumentar
o tamanho do arranjo?
Teremos que mudar o
limite do for tamb´em
Deve haver um meio
melhor...
public static void main(
String[] args) {
double media = 0;
for (int i=0; i<4; i++) {
media += precos[i];
}
media = media/4;
System.out.println(media);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 32 / 38
Arranjos
Em java, arranjos vˆem
com o atributo
pr´e-definido length,
contendo seu
comprimento
Seu valor ´e definido
automaticamente pelo
compilador
public static void main(
String[] args) {
double media = 0;
for (int i=0;i<precos.length;
i++) {
media += precos[i];
}
media = media/precos.length;
System.out.println(media);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 33 / 38
Arranjos
Esse valor n˜ao pode ser
alterado
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 34 / 38
Arranjos
Esse valor n˜ao pode ser
alterado
Se fizermos
precos.length = 10;
teremos a mensagem:
$ javac AreaCasa.java
AreaCasa.java:82: cannot assign
a value to final variable
length
precos.length = 10;
^
1 error
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 34 / 38
For com Arranjos
Vimos 3 tipos de la¸cos:
while, do...while e
for
Com isso, o c´alculo da
m´edia ficava:
public static void main(
String[] args) {
double media = 0;
for (int i=0;i<precos.length;
i++) {
media += precos[i];
}
media = media/precos.length;
System.out.println(media);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 35 / 38
For com Arranjos
Existe, contudo, um
quarto tipo em java
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 36 / 38
For com Arranjos
Existe, contudo, um
quarto tipo em java
Na verdade, um
segundo tipo de for,
projetado para iterar,
dentre outras coisas,
em arranjos
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 36 / 38
For com Arranjos
Existe, contudo, um
quarto tipo em java
Na verdade, um
segundo tipo de for,
projetado para iterar,
dentre outras coisas,
em arranjos
public static void main(
String[] args) {
double media = 0;
for (double valor : precos) {
media += valor;
}
media = media/precos.length;
System.out.println(media);
}
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 36 / 38
For com Arranjos
public static void main(String[]
args) {
double media = 0;
for (int i=0;i<precos.length;
i++){
media += precos[i];
}
media = media/precos.length;
System.out.println(media);
}
Itera no ´ındice do
arranjo
public static void main(String[]
args) {
double media = 0;
for (double valor : precos) {
media += valor;
}
media = media/precos.length;
System.out.println(media);
}
Itera em cada valor do
arranjo
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 37 / 38
For com Arranjos
public static void main(String[]
args) {
double media = 0;
for (int i=0;i<precos.length;
i++){
media += precos[i];
}
media = media/precos.length;
System.out.println(media);
}
Usa o iterador (i)
como ´ındice para
acessar o valor
public static void main(String[]
args) {
double media = 0;
for (double valor : precos) {
media += valor;
}
media = media/precos.length;
System.out.println(media);
}
O iterador (valor)
cont´em o pr´oprio valor
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 37 / 38
For com Arranjos
public static void main(String[]
args) {
double media = 0;
for (int i=0;i<precos.length;
i++){
media += precos[i];
}
media = media/precos.length;
System.out.println(media);
}
Acessa o valor de
maneira indireta
public static void main(String[]
args) {
double media = 0;
for (double valor : precos) {
media += valor;
}
media = media/precos.length;
System.out.println(media);
}
Acessa o valor de
maneira direta
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 37 / 38
Videoaula
https://www.youtube.com/watch?v=Iq50qq6QfUU
e
https://www.youtube.com/watch?v=H6kWSniXHto
(parcial)
Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 38 / 38

Mais conteúdo relacionado

Mais de Norton Trevisan Roman

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04
 
(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03
 
(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02
 
(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23
 
(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22
 
(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21
 

Último

O Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhosoO Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhoso
VALMIRARIBEIRO1
 
4 ano atividade fonema e letra 08.03-1.pdf
4 ano atividade fonema e letra 08.03-1.pdf4 ano atividade fonema e letra 08.03-1.pdf
4 ano atividade fonema e letra 08.03-1.pdf
LindinhaSilva1
 
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptxSlide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
sfwsoficial
 

Último (20)

Descrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteDescrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamente
 
662938.pdf aula digital de educação básica
662938.pdf aula digital de educação básica662938.pdf aula digital de educação básica
662938.pdf aula digital de educação básica
 
O Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhosoO Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhoso
 
Power Point sobre as etapas do Desenvolvimento infantil
Power Point sobre as etapas do Desenvolvimento infantilPower Point sobre as etapas do Desenvolvimento infantil
Power Point sobre as etapas do Desenvolvimento infantil
 
Sistema de Acompanhamento - Diário Online 2021.pdf
Sistema de Acompanhamento - Diário Online 2021.pdfSistema de Acompanhamento - Diário Online 2021.pdf
Sistema de Acompanhamento - Diário Online 2021.pdf
 
Apostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdfApostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdf
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de Infância
 
Poema - Aedes Aegypt.
Poema - Aedes Aegypt.Poema - Aedes Aegypt.
Poema - Aedes Aegypt.
 
Multiplicação - Caça-número
Multiplicação - Caça-número Multiplicação - Caça-número
Multiplicação - Caça-número
 
4 ano atividade fonema e letra 08.03-1.pdf
4 ano atividade fonema e letra 08.03-1.pdf4 ano atividade fonema e letra 08.03-1.pdf
4 ano atividade fonema e letra 08.03-1.pdf
 
BENEFÍCIOS DA NEUROPSICOPEDAGOGIA educacional
BENEFÍCIOS DA NEUROPSICOPEDAGOGIA educacionalBENEFÍCIOS DA NEUROPSICOPEDAGOGIA educacional
BENEFÍCIOS DA NEUROPSICOPEDAGOGIA educacional
 
Poema - Maio Laranja
Poema - Maio Laranja Poema - Maio Laranja
Poema - Maio Laranja
 
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHASMARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
 
UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...
UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...
UFCD_9184_Saúde, nutrição, higiene, segurança, repouso e conforto da criança ...
 
Alemanha vs União Soviética - Livro de Adolf Hitler
Alemanha vs União Soviética - Livro de Adolf HitlerAlemanha vs União Soviética - Livro de Adolf Hitler
Alemanha vs União Soviética - Livro de Adolf Hitler
 
Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...
Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...
Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...
 
Livro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-criançasLivro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-crianças
 
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos AnimaisNós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
 
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptxSlide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
 
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
 

(ACH2001) Introdução à Programação - Aula 10

  • 1. Aula 10 – Arranjos Norton Trevisan Roman 19 de mar¸co de 2020 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 1 / 38
  • 2. Arranjos Considere o c´odigo para calcular o valor da piscina: Qual o problema? static double valorPiscina( double area, int material) { double valor; switch (material) { case ALVENARIA: return(area*1500); case VINIL: return(area*1100); case FIBRA: return(area*750); case PLASTICO: return(area*500); default: return(-1); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 2 / 38
  • 3. Arranjos Considere o c´odigo para calcular o valor da piscina: Qual o problema? Todos os pre¸cos est˜ao declarados dentro do m´etodo Se o c´odigo crescer, fica mais dif´ıcil achar, em caso de mudan¸ca static double valorPiscina( double area, int material) { double valor; switch (material) { case ALVENARIA: return(area*1500); case VINIL: return(area*1100); case FIBRA: return(area*750); case PLASTICO: return(area*500); default: return(-1); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 2 / 38
  • 4. Arranjos Considere o c´odigo para calcular o valor da piscina: Qual o problema? Todos os pre¸cos est˜ao declarados dentro do m´etodo Se o c´odigo crescer, fica mais dif´ıcil achar, em caso de mudan¸ca Que fazer? static double valorPiscina( double area, int material) { double valor; switch (material) { case ALVENARIA: return(area*1500); case VINIL: return(area*1100); case FIBRA: return(area*750); case PLASTICO: return(area*500); default: return(-1); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 2 / 38
  • 5. Arranjos Poder´ıamos agrupar essa informa¸c˜ao, sob a forma de constantes /* materiais da piscina */ static final int ALVENARIA = 0; static final int VINIL = 1; static final int FIBRA = 2; static final int PLASTICO = 3; /* pre¸cos dos materiais */ static final double P_ALVENARIA = 1500; static final double P_VINIL = 1100; static final double P_FIBRA = 750; static final double P_PLASTICO = 500; Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 3 / 38
  • 6. Arranjos Poder´ıamos agrupar essa informa¸c˜ao, sob a forma de constantes Tornaria mais f´acil a manuten¸c˜ao do c´odigo /* materiais da piscina */ static final int ALVENARIA = 0; static final int VINIL = 1; static final int FIBRA = 2; static final int PLASTICO = 3; /* pre¸cos dos materiais */ static final double P_ALVENARIA = 1500; static final double P_VINIL = 1100; static final double P_FIBRA = 750; static final double P_PLASTICO = 500; Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 3 / 38
  • 7. Arranjos Poder´ıamos agrupar essa informa¸c˜ao, sob a forma de constantes Tornaria mais f´acil a manuten¸c˜ao do c´odigo Basta? /* materiais da piscina */ static final int ALVENARIA = 0; static final int VINIL = 1; static final int FIBRA = 2; static final int PLASTICO = 3; /* pre¸cos dos materiais */ static final double P_ALVENARIA = 1500; static final double P_VINIL = 1100; static final double P_FIBRA = 750; static final double P_PLASTICO = 500; Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 3 / 38
  • 8. Arranjos Ainda temos que relacion´a-las static double valorPiscina( double area, int material) { double valor; switch (material) { case ALVENARIA: return(area* P_ALVENARIA); case VINIL: return(area* P_VINIL); case FIBRA: return(area* P_FIBRA); case PLASTICO: return(area* P_PLASTICO); default: return(-1); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 4 / 38
  • 9. Arranjos Ainda temos que relacion´a-las E como far´ıamos se quis´essemos calcular o pre¸co m´edio dos materiais? static double valorPiscina( double area, int material) { double valor; switch (material) { case ALVENARIA: return(area* P_ALVENARIA); case VINIL: return(area* P_VINIL); case FIBRA: return(area* P_FIBRA); case PLASTICO: return(area* P_PLASTICO); default: return(-1); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 4 / 38
  • 10. Arranjos (P_ALVENARIA + P_VINIL + P_FIBRA + P_PLASTICO)/4 static double valorPiscina( double area, int material) { double valor; switch (material) { case ALVENARIA: return(area* P_ALVENARIA); case VINIL: return(area* P_VINIL); case FIBRA: return(area* P_FIBRA); case PLASTICO: return(area* P_PLASTICO); default: return(-1); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 5 / 38
  • 11. Arranjos (P_ALVENARIA + P_VINIL + P_FIBRA + P_PLASTICO)/4 Deve haver um meio melhor, que mantenha o agrupamento, simplifique o c´odigo e facilite esse tipo de c´alculo static double valorPiscina( double area, int material) { double valor; switch (material) { case ALVENARIA: return(area* P_ALVENARIA); case VINIL: return(area* P_VINIL); case FIBRA: return(area* P_FIBRA); case PLASTICO: return(area* P_PLASTICO); default: return(-1); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 5 / 38
  • 12. Arranjos Usamos Arranjos (Array): Estruturas de dados, de tamanho fixo, que permitem armazenar um conjunto de valores de um mesmo tipo Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 6 / 38
  • 13. Arranjos Usamos Arranjos (Array): Estruturas de dados, de tamanho fixo, que permitem armazenar um conjunto de valores de um mesmo tipo Em vez de termos static final double P_ALVENARIA = 1500; static final double P_VINIL = 1100; static final double P_FIBRA = 750; static final double P_PLASTICO = 500; Podemos fazer static double[] precos = {1500, 1100, 750, 500}; ou static double precos[] = {1500, 1100, 750, 500}; Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 6 / 38
  • 14. Arranjos Deixou de ser constante static final double P_ALVENARIA = 1500; static final double P_VINIL = 1100; static final double P_FIBRA = 750; static final double P_PLASTICO = 500; static double[] precos = {1500, 1100, 750, 500}; ou static double precos[] = {1500, 1100, 750, 500}; Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 7 / 38
  • 15. Arranjos Deixou de ser constante Mas deixou o c´odigo mais enxuto static final double P_ALVENARIA = 1500; static final double P_VINIL = 1100; static final double P_FIBRA = 750; static final double P_PLASTICO = 500; static double[] precos = {1500, 1100, 750, 500}; ou static double precos[] = {1500, 1100, 750, 500}; Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 7 / 38
  • 16. Arranjos static double[] precos = {1500, 1100, 750, 500}; diz ao compilador para reservar espa¸co na mem´oria para 4 doubles Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 8 / 38
  • 17. Arranjos static double[] precos = {1500, 1100, 750, 500}; diz ao compilador para reservar espa¸co na mem´oria para 4 doubles Armazenando os valores 1500, 1100, 750, 500 neles Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 8 / 38
  • 18. Arranjos static double[] precos = {1500, 1100, 750, 500}; diz ao compilador para reservar espa¸co na mem´oria para 4 doubles Armazenando os valores 1500, 1100, 750, 500 neles Por enquanto, digamos que o static est´a a´ı por precos ser um atributo do programa... Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 8 / 38
  • 19. Revendo a Mem´oria O que acontece ao fazermos float areaq;? Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 9 / 38
  • 20. Revendo a Mem´oria O que acontece ao fazermos float areaq;? areaq 0xff1 Alocamos um espa¸co para a vari´avel areaq grande o suficiente para guardar um float (4B), e cujo endere¸co o compilador conhece (o 0xff1 na figura) Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 9 / 38
  • 21. Revendo a Mem´oria O que acontece ao fazermos float areaq;? areaq 0xff1 Alocamos um espa¸co para a vari´avel areaq grande o suficiente para guardar um float (4B), e cujo endere¸co o compilador conhece (o 0xff1 na figura) Qualquer valor para areaq ´e armazenado diretamente nesse espa¸co – Armazena o valor Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 9 / 38
  • 22. Revendo a Mem´oria Endere¸co? Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
  • 23. Revendo a Mem´oria Endere¸co? Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de mem´oria que h´a – seu endere¸co Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
  • 24. Revendo a Mem´oria Endere¸co? Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de mem´oria que h´a – seu endere¸co Normalmente em hexadecimal Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
  • 25. Revendo a Mem´oria Endere¸co? Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de mem´oria que h´a – seu endere¸co Normalmente em hexadecimal Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
  • 26. Revendo a Mem´oria Endere¸co? Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de mem´oria que h´a – seu endere¸co Normalmente em hexadecimal Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001 Bin´ario: 0, 1 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
  • 27. Revendo a Mem´oria Endere¸co? Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de mem´oria que h´a – seu endere¸co Normalmente em hexadecimal Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001 Bin´ario: 0, 1 Octal: 0, 1, . . . , 7. Em bin´ario, de 000 a 111 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
  • 28. Revendo a Mem´oria Endere¸co? Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de mem´oria que h´a – seu endere¸co Normalmente em hexadecimal Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001 Bin´ario: 0, 1 Octal: 0, 1, . . . , 7. Em bin´ario, de 000 a 111 Hexadecimal: 0, 1, . . . , 9, A, B, . . . , F. Em bin´ario, de 0000 a 1111 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
  • 29. Revendo a Mem´oria Endere¸co? Os bytes na mem´oria s˜ao numerados de 0 ao m´aximo de mem´oria que h´a – seu endere¸co Normalmente em hexadecimal Decimal: 0, 1, . . . , 9. Em bin´ario, de 0000 a 1001 Bin´ario: 0, 1 Octal: 0, 1, . . . , 7. Em bin´ario, de 000 a 111 Hexadecimal: 0, 1, . . . , 9, A, B, . . . , F. Em bin´ario, de 0000 a 1111 Note que tanto Octal quanto Hexa usam todos os bits a eles alocados Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 10 / 38
  • 30. Revendo a Mem´oria No caso de float areaq, s˜ao alocados 4B cont´ıguos na mem´oria, sendo 0xff1 o endere¸co do primeiro deles areaq 0xff1 O compilador, para sua facilidade, deixa vocˆe dar nomes a esses endere¸cos → s˜ao as vari´aveis Os nomes das vari´aveis s˜ao, ent˜ao, o mapeamento feito pelo compilador a esses endere¸cos Um nome ou r´otulo dado a esse local de mem´oria Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 11 / 38
  • 31. Revendo a Mem´oria O programador n˜ao precisa saber qual ´e esse endere¸co areaq 0xff1 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 12 / 38
  • 32. Revendo a Mem´oria O programador n˜ao precisa saber qual ´e esse endere¸co areaq 0xff1 Diz-se que a informa¸c˜ao foi abstra´ıda: Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 12 / 38
  • 33. Revendo a Mem´oria O programador n˜ao precisa saber qual ´e esse endere¸co areaq 0xff1 Diz-se que a informa¸c˜ao foi abstra´ıda: Olha-se o problema sob um ˆangulo em que n˜ao h´a a necessidade de se saber o valor desse endere¸co Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 12 / 38
  • 34. Arranjos na Mem´oria O que acontece ao fazermos double[] precos = {1500, 1100, 750, 500};? Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 13 / 38
  • 35. Arranjos na Mem´oria O que acontece ao fazermos double[] precos = {1500, 1100, 750, 500};? 0xff5 O compilador aloca espa¸co suficiente para 4 doubles consecutivos (32B) Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 13 / 38
  • 36. Arranjos na Mem´oria O que acontece ao fazermos double[] precos = {1500, 1100, 750, 500};? 0xff5 1500 1100 750 500 O compilador aloca espa¸co suficiente para 4 doubles consecutivos (32B) Guarda os valores da inicializa¸c˜ao l´a Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 13 / 38
  • 37. Arranjos na Mem´oria Em seguida aloca mem´oria para a vari´avel precos, grande o suficiente para caber um endere¸co, e cujo endere¸co 0xff5 1500 1100 750 500 precos 0x030 o compilador tamb´em conhece Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 14 / 38
  • 38. Arranjos na Mem´oria Em seguida aloca mem´oria para a vari´avel precos, grande o suficiente para caber um endere¸co, e cujo endere¸co 0xff5 1500 1100 750 500 precos 0x030 0xff5 o compilador tamb´em conhece Ent˜ao guarda em precos o endere¸co na mem´oria do primeiro byte do arranjo Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 14 / 38
  • 39. Arranjos na Mem´oria Em seguida aloca mem´oria para a vari´avel precos, grande o suficiente para caber um endere¸co, e cujo endere¸co 0xff5 1500 1100 750 500 precos 0x030 0xff5 o compilador tamb´em conhece Ent˜ao guarda em precos o endere¸co na mem´oria do primeiro byte do arranjo Guarda o endere¸co → armazena uma referˆencia ao in´ıcio do arranjo Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 14 / 38
  • 40. Arranjos na Mem´oria Para chegar ao primeiro elemento do arranjo, o computador: 0xff5 1500 1100 750 500 precos 0x030 0xff5 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
  • 41. Arranjos na Mem´oria Para chegar ao primeiro elemento do arranjo, o computador: 0xff5 1500 1100 750 500 precos 0x030 0xff5 Vai `a regi˜ao da mem´oria correspondente a pre¸cos Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
  • 42. Arranjos na Mem´oria Para chegar ao primeiro elemento do arranjo, o computador: 0xff5 1500 1100 750 500 precos 0x030 0xff5 Vai `a regi˜ao da mem´oria correspondente a pre¸cos Lˆe seu conte´udo – endere¸co do primeiro byte do arranjo Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
  • 43. Arranjos na Mem´oria Para chegar ao primeiro elemento do arranjo, o computador: 0xff5 1500 1100 750 500 precos 0x030 0xff5 Vai `a regi˜ao da mem´oria correspondente a pre¸cos Lˆe seu conte´udo – endere¸co do primeiro byte do arranjo Vai ent˜ao a essa regi˜ao da mem´oria Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
  • 44. Arranjos na Mem´oria Para chegar ao primeiro elemento do arranjo, o computador: 0xff5 1500 1100 750 500 precos 0x030 0xff5 Vai `a regi˜ao da mem´oria correspondente a pre¸cos Lˆe seu conte´udo – endere¸co do primeiro byte do arranjo Vai ent˜ao a essa regi˜ao da mem´oria e lˆe o conte´udo Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 15 / 38
  • 45. Arranjos na Mem´oria Em java, como podemos ler um elemento do arranjo? Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 16 / 38
  • 46. Arranjos na Mem´oria Em java, como podemos ler um elemento do arranjo? Fazendo arranjo[indice] Onde ´ındice ´e um inteiro de 0 a n − 1, com n sendo o n´umero de elementos do arranjo 0 corresponde ao primeiro elemento, 1 ao segundo, etc Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 16 / 38
  • 47. Arranjos na Mem´oria – Exemplo public static void main(String[] args) { System.out.println(precos[0]); System.out.println(precos[1]); System.out.println(precos[2]); System.out.println(precos[3]); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 17 / 38
  • 48. Arranjos na Mem´oria – Exemplo public static void main(String[] args) { System.out.println(precos[0]); System.out.println(precos[1]); System.out.println(precos[2]); System.out.println(precos[3]); } Ou: public static void main(String[] args) { for (int i=0; i<4; i++) { System.out.println(precos[i]); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 17 / 38
  • 49. Arranjos na Mem´oria Uma vez que o ´ındice pode ser qualquer inteiro, podemos melhorar a legibilidade do c´odigo public static void main(String[] args) { for (int i=0; i<4; i++) { System.out.println(precos[i]); } } public static void main(String[] args) { for (int i=ALVENARIA; i<=PLASTICO; i++) { System.out.println(precos[i]); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 18 / 38
  • 50. Arranjos na Mem´oria Uma vez que o ´ındice pode ser qualquer inteiro, podemos melhorar a legibilidade do c´odigo Repare no main... String[] args public static void main(String[] args) { for (int i=0; i<4; i++) { System.out.println(precos[i]); } } public static void main(String[] args) { for (int i=ALVENARIA; i<=PLASTICO; i++) { System.out.println(precos[i]); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 18 / 38
  • 51. Arranjos na Mem´oria Uma vez que o ´ındice pode ser qualquer inteiro, podemos melhorar a legibilidade do c´odigo Repare no main... String[] args args tamb´em ´e um arranjo public static void main(String[] args) { for (int i=0; i<4; i++) { System.out.println(precos[i]); } } public static void main(String[] args) { for (int i=ALVENARIA; i<=PLASTICO; i++) { System.out.println(precos[i]); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 18 / 38
  • 52. ´Indices na Mem´oria Como o computador faz para achar o elemento de ´ındice i do arranjo precos? 0xff5 1500 1100 750 500 precos 0x030 0xff5 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 19 / 38
  • 53. ´Indices na Mem´oria Como o computador faz para achar o elemento de ´ındice i do arranjo precos? Primeiro, vai `a regi˜ao da mem´oria correspondente a precos 0xff5 1500 1100 750 500 precos 0x030 0xff5 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 19 / 38
  • 54. ´Indices na Mem´oria Como o computador faz para achar o elemento de ´ındice i do arranjo precos? Primeiro, vai `a regi˜ao da mem´oria correspondente a precos 0xff5 1500 1100 750 500 precos 0x030 0xff5 Lˆe seu conte´udo – endere¸co do primeiro byte do arranjo Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 19 / 38
  • 55. ´Indices na Mem´oria Calcula ent˜ao a posi¸c˜ao do elemento de ´ındice i: 0xff5 1500 1100 750 500 precos 0x030 0xff5 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 20 / 38
  • 56. ´Indices na Mem´oria Calcula ent˜ao a posi¸c˜ao do elemento de ´ındice i: Sabendo que cada elemento tem 8B (double), e que 0 ≤ i ≤ n − 1 0xff5 1500 1100 750 500 precos 0x030 0xff5 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 20 / 38
  • 57. ´Indices na Mem´oria Calcula ent˜ao a posi¸c˜ao do elemento de ´ındice i: Sabendo que cada elemento tem 8B (double), e que 0 ≤ i ≤ n − 1 0xff5 1500 1100 750 500 precos 0x030 0xff5 O elemento estar´a a 8 × i bytes do in´ıcio do arranjo Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 20 / 38
  • 58. ´Indices na Mem´oria Calcula ent˜ao a posi¸c˜ao do elemento de ´ındice i: Sabendo que cada elemento tem 8B (double), e que 0 ≤ i ≤ n − 1 0xff5 1500 1100 750 500 precos 0x030 0xff5 O elemento estar´a a 8 × i bytes do in´ıcio do arranjo O endere¸co ser´a 0xff5 + 8 × i Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 20 / 38
  • 59. ´Indices na Mem´oria Vai `a regi˜ao da mem´oria correspondente a esse endere¸co e lˆe seu conte´udo 0xff5 1500 1100 750 500 precos 0x030 0xff5 Por isso o ´ındice come¸ca no 0. Se i = 0, o endere¸co visitado ser´a o do in´ıcio do arranjo Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 21 / 38
  • 60. Arranjos Voltemos agora a valorPiscina... static double valorPiscina(double area, int material) { switch (material) { case ALVENARIA: return(area* P_ALVENARIA); case VINIL: return(area* P_VINIL); case FIBRA: return(area* P_FIBRA); case PLASTICO: return(area* P_PLASTICO); default: return(-1); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 22 / 38
  • 61. Arranjos Voltemos agora a valorPiscina... Como ficaria usando o arranjo precos? static double valorPiscina(double area, int material) { switch (material) { case ALVENARIA: return(area* P_ALVENARIA); case VINIL: return(area* P_VINIL); case FIBRA: return(area* P_FIBRA); case PLASTICO: return(area* P_PLASTICO); default: return(-1); } } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 22 / 38
  • 62. Arranjos static double valorPiscina(double area, int material) { if (material<ALVENARIA || material>PLASTICO || area<0) return(-1); return(area*precos[material]); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 23 / 38
  • 63. Arranjos Inclu´ımos o teste para a ´area static double valorPiscina(double area, int material) { if (material<ALVENARIA || material>PLASTICO || area<0) return(-1); return(area*precos[material]); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 23 / 38
  • 64. Arranjos Inclu´ımos o teste para a ´area Usamos o c´odigo do tipo do material como ´ındice em precos static double valorPiscina(double area, int material) { if (material<ALVENARIA || material>PLASTICO || area<0) return(-1); return(area*precos[material]); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 23 / 38
  • 65. Arranjos Inclu´ımos o teste para a ´area Usamos o c´odigo do tipo do material como ´ındice em precos static double valorPiscina(double area, int material) { if (material<ALVENARIA || material>PLASTICO || area<0) return(-1); return(area*precos[material]); } ´E importante certificar-se que precos[0] tem o pre¸co de ALVENARIA, que precos[1] tem o pre¸co de VINIL etc Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 23 / 38
  • 66. Arranjos Elementos em arranjos podem ser atribu´ıdos a outras vari´aveis, como uma vari´avel comum: double x = precos[0]; Desde que o tipo da vari´avel seja o mesmo do tipo armazenado no arranjo Do contr´ario, um type cast ser´a necess´ario Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 24 / 38
  • 67. Arranjos Elementos em arranjos podem ser atribu´ıdos a outras vari´aveis, como uma vari´avel comum: double x = precos[0]; Desde que o tipo da vari´avel seja o mesmo do tipo armazenado no arranjo Do contr´ario, um type cast ser´a necess´ario E o que acontece se tentamos acessar um elemento fora dos limites do arranjo? Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 24 / 38
  • 68. Arranjos C´odigo Sa´ıda public static void main(String[] args) { double x = precos[-1]; } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
  • 69. Arranjos C´odigo Sa´ıda public static void main(String[] args) { double x = precos[-1]; } $ javac AreaCasa $ java AreaCasa Exception in thread "main" java.lang.ArrayIndexOutOfBounds Exception: -1 at AreaCasa.main(AreaCasa.java:73) Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
  • 70. Arranjos C´odigo Sa´ıda public static void main(String[] args) { double x = precos[-1]; } $ javac AreaCasa $ java AreaCasa Exception in thread "main" java.lang.ArrayIndexOutOfBounds Exception: -1 at AreaCasa.main(AreaCasa.java:73) public static void main(String[] args) { double x = precos[4]; } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
  • 71. Arranjos C´odigo Sa´ıda public static void main(String[] args) { double x = precos[-1]; } $ javac AreaCasa $ java AreaCasa Exception in thread "main" java.lang.ArrayIndexOutOfBounds Exception: -1 at AreaCasa.main(AreaCasa.java:73) public static void main(String[] args) { double x = precos[4]; } $ javac AreaCasa $ java AreaCasa Exception in thread "main" java.lang.ArrayIndexOutOfBounds Exception: 4 at AreaCasa.main(AreaCasa.java:73) Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
  • 72. Arranjos C´odigo Sa´ıda public static void main(String[] args) { double x = precos[-1]; } $ javac AreaCasa $ java AreaCasa Exception in thread "main" java.lang.ArrayIndexOutOfBounds Exception: -1 at AreaCasa.main(AreaCasa.java:73) public static void main(String[] args) { double x = precos[4]; } $ javac AreaCasa $ java AreaCasa Exception in thread "main" java.lang.ArrayIndexOutOfBounds Exception: 4 at AreaCasa.main(AreaCasa.java:73) Compilar´a... mas gerar´a erro ao executar Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 25 / 38
  • 73. Arranjos E como podemos dar um novo valor a um elemento do arranjo? Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 26 / 38
  • 74. Arranjos E como podemos dar um novo valor a um elemento do arranjo? arranjo[´ındice] = novo_valor precos[2] = 500; Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 26 / 38
  • 75. Arranjos E como podemos dar um novo valor a um elemento do arranjo? arranjo[´ındice] = novo_valor precos[2] = 500; Vimos que, para criar um arranjo, basta fazer double[] precos = {1500, 1100, 750, 500}; Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 26 / 38
  • 76. Arranjos E como podemos dar um novo valor a um elemento do arranjo? arranjo[´ındice] = novo_valor precos[2] = 500; Vimos que, para criar um arranjo, basta fazer double[] precos = {1500, 1100, 750, 500}; Seria a ´unica maneira? Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 26 / 38
  • 77. Arranjos public static void main(String[] args) { double[] precos2 = new double[4]; precos2[ALVENARIA] = 1500; precos2[VINIL] = 1100; precos2[FIBRA] = 750; precos2[PLASTICO] = 500; } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 27 / 38
  • 78. Arranjos Criamos um arranjo de 4 elementos, todos com valor zero public static void main(String[] args) { double[] precos2 = new double[4]; precos2[ALVENARIA] = 1500; precos2[VINIL] = 1100; precos2[FIBRA] = 750; precos2[PLASTICO] = 500; } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 27 / 38
  • 79. Arranjos Criamos um arranjo de 4 elementos, todos com valor zero Inicializamos ent˜ao esse arranjo public static void main(String[] args) { double[] precos2 = new double[4]; precos2[ALVENARIA] = 1500; precos2[VINIL] = 1100; precos2[FIBRA] = 750; precos2[PLASTICO] = 500; } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 27 / 38
  • 80. Arranjos double[] precos = {1500, 1100, 750, 500}; double[] precos2 = new double[4]; precos2[ALVENARIA] = 1500; precos2[VINIL] = 1100; precos2[FIBRA] = 750; precos2[PLASTICO] = 500; Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
  • 81. Arranjos double[] precos = {1500, 1100, 750, 500}; double[] precos2 = new double[4]; precos2[ALVENARIA] = 1500; precos2[VINIL] = 1100; precos2[FIBRA] = 750; precos2[PLASTICO] = 500; ´Util se conhecemos os valores de antem˜ao Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
  • 82. Arranjos double[] precos = {1500, 1100, 750, 500}; double[] precos2 = new double[4]; precos2[ALVENARIA] = 1500; precos2[VINIL] = 1100; precos2[FIBRA] = 750; precos2[PLASTICO] = 500; ´Util se conhecemos os valores de antem˜ao E se esses valores s˜ao poucos Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
  • 83. Arranjos double[] precos = {1500, 1100, 750, 500}; double[] precos2 = new double[4]; precos2[ALVENARIA] = 1500; precos2[VINIL] = 1100; precos2[FIBRA] = 750; precos2[PLASTICO] = 500; ´Util se conhecemos os valores de antem˜ao E se esses valores s˜ao poucos ´Util se n˜ao conhecemos os valores de antem˜ao Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
  • 84. Arranjos double[] precos = {1500, 1100, 750, 500}; double[] precos2 = new double[4]; precos2[ALVENARIA] = 1500; precos2[VINIL] = 1100; precos2[FIBRA] = 750; precos2[PLASTICO] = 500; ´Util se conhecemos os valores de antem˜ao E se esses valores s˜ao poucos ´Util se n˜ao conhecemos os valores de antem˜ao Ou se esses valores s˜ao muitos Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 28 / 38
  • 85. Arranjos Arranjos podem ser criados de qualquer tipo no java: tipo[] nomeDaVariavel = new tipo[tamanho do arranjo] Em que tamanho do arranjo ´e o n´umero de elementos que ele conter´a Seus ´ındices variando de 0 a tamanho − 1 Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 29 / 38
  • 86. Arranjos Ex: float[] precos2 = new float[4]; double[] precos2 = new double[4]; int[] tamanhos = new int[10]; long[] tamanhos = new long[10]; boolean[] comprados = new boolean[20]; etc (veremos mais adiante) Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 30 / 38
  • 87. Arranjos Vamos calcular o pre¸co m´edio dos materiais de nossa piscina Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 31 / 38
  • 88. Arranjos Vamos calcular o pre¸co m´edio dos materiais de nossa piscina Como fazer? Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 31 / 38
  • 89. Arranjos Vamos calcular o pre¸co m´edio dos materiais de nossa piscina Como fazer? Somando todos os pre¸cos, e dividindo pelo n´umero deles Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 31 / 38
  • 90. Arranjos Vamos calcular o pre¸co m´edio dos materiais de nossa piscina Como fazer? Somando todos os pre¸cos, e dividindo pelo n´umero deles public static void main( String[] args) { double media = 0; for (int i=0; i<4; i++) { media += precos[i]; } media = media/4; System.out.println(media); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 31 / 38
  • 91. Arranjos Funciona... mas e se tivermos que aumentar o tamanho do arranjo? public static void main( String[] args) { double media = 0; for (int i=0; i<4; i++) { media += precos[i]; } media = media/4; System.out.println(media); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 32 / 38
  • 92. Arranjos Funciona... mas e se tivermos que aumentar o tamanho do arranjo? Teremos que mudar o limite do for tamb´em public static void main( String[] args) { double media = 0; for (int i=0; i<4; i++) { media += precos[i]; } media = media/4; System.out.println(media); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 32 / 38
  • 93. Arranjos Funciona... mas e se tivermos que aumentar o tamanho do arranjo? Teremos que mudar o limite do for tamb´em Deve haver um meio melhor... public static void main( String[] args) { double media = 0; for (int i=0; i<4; i++) { media += precos[i]; } media = media/4; System.out.println(media); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 32 / 38
  • 94. Arranjos Em java, arranjos vˆem com o atributo pr´e-definido length, contendo seu comprimento Seu valor ´e definido automaticamente pelo compilador public static void main( String[] args) { double media = 0; for (int i=0;i<precos.length; i++) { media += precos[i]; } media = media/precos.length; System.out.println(media); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 33 / 38
  • 95. Arranjos Esse valor n˜ao pode ser alterado Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 34 / 38
  • 96. Arranjos Esse valor n˜ao pode ser alterado Se fizermos precos.length = 10; teremos a mensagem: $ javac AreaCasa.java AreaCasa.java:82: cannot assign a value to final variable length precos.length = 10; ^ 1 error Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 34 / 38
  • 97. For com Arranjos Vimos 3 tipos de la¸cos: while, do...while e for Com isso, o c´alculo da m´edia ficava: public static void main( String[] args) { double media = 0; for (int i=0;i<precos.length; i++) { media += precos[i]; } media = media/precos.length; System.out.println(media); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 35 / 38
  • 98. For com Arranjos Existe, contudo, um quarto tipo em java Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 36 / 38
  • 99. For com Arranjos Existe, contudo, um quarto tipo em java Na verdade, um segundo tipo de for, projetado para iterar, dentre outras coisas, em arranjos Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 36 / 38
  • 100. For com Arranjos Existe, contudo, um quarto tipo em java Na verdade, um segundo tipo de for, projetado para iterar, dentre outras coisas, em arranjos public static void main( String[] args) { double media = 0; for (double valor : precos) { media += valor; } media = media/precos.length; System.out.println(media); } Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 36 / 38
  • 101. For com Arranjos public static void main(String[] args) { double media = 0; for (int i=0;i<precos.length; i++){ media += precos[i]; } media = media/precos.length; System.out.println(media); } Itera no ´ındice do arranjo public static void main(String[] args) { double media = 0; for (double valor : precos) { media += valor; } media = media/precos.length; System.out.println(media); } Itera em cada valor do arranjo Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 37 / 38
  • 102. For com Arranjos public static void main(String[] args) { double media = 0; for (int i=0;i<precos.length; i++){ media += precos[i]; } media = media/precos.length; System.out.println(media); } Usa o iterador (i) como ´ındice para acessar o valor public static void main(String[] args) { double media = 0; for (double valor : precos) { media += valor; } media = media/precos.length; System.out.println(media); } O iterador (valor) cont´em o pr´oprio valor Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 37 / 38
  • 103. For com Arranjos public static void main(String[] args) { double media = 0; for (int i=0;i<precos.length; i++){ media += precos[i]; } media = media/precos.length; System.out.println(media); } Acessa o valor de maneira indireta public static void main(String[] args) { double media = 0; for (double valor : precos) { media += valor; } media = media/precos.length; System.out.println(media); } Acessa o valor de maneira direta Norton Trevisan Roman Aula 10 – Arranjos 19 de mar¸co de 2020 37 / 38