Considere a classe Lista
que gerencia uma lista de números simples:
In [1]:
public class Lista {
protected int vlista[] = new int[100];
protected int ultimo = -1;
public void adicionar(int item) {
if (ultimo+1 < vlista.length) {
ultimo++;
vlista[ultimo] = item;
}
}
public String toString() {
String str = "";
for (int l = 0; l <= ultimo; l++)
str += vlista[l] + ((l < ultimo) ? ", " : "");
return str;
}
}
Out[1]:
In [2]:
Lista l = new Lista();
l.adicionar(10);
l.adicionar(15);
l.adicionar(20);
System.out.println("Lista: " + l);
Out[2]:
In [3]:
public class ListaEstatistica extends Lista {
public double soma() {
double s = 0;
for (int l = 0; l <= ultimo; l++)
s += vlista[l];
return s;
}
public double media() {
return (ultimo >= 0)
? soma() / (ultimo+1) : 0;
}
}
Out[3]:
In [4]:
public class ListaUtil extends Lista {
public void ordena() {
int lastSwap = ultimo;
while (lastSwap > 0) {
int swap = 0;
for (int v = 0; v < lastSwap; v++)
if (vlista[v] > vlista[v+1]) {
int aux = vlista[v];
vlista[v] = vlista[v+1];
vlista[v+1] = aux;
swap = v;
}
lastSwap = swap;
}
}
}
Out[4]:
In [5]:
ListaEstatistica le = new ListaEstatistica();
le.adicionar(10);
le.adicionar(20);
le.adicionar(5);
le.adicionar(35);
le.adicionar(15);
System.out.println("Soma: " + le.soma());
System.out.println("Media: " + le.media());
ListaUtil lu = new ListaUtil();
lu.adicionar(10);
lu.adicionar(20);
lu.adicionar(5);
lu.adicionar(35);
lu.adicionar(15);
lu.ordena();
System.out.println("Ordenado: " + lu);
Out[5]:
In [6]:
public class ListaUtil extends Lista {
private boolean duplicatas = true;
public boolean getDuplicatas() {
return duplicatas;
}
public void setDuplicatas(boolean duplicatas) {
this.duplicatas = duplicatas;
}
public void ordena() {
int lastSwap = ultimo;
while (lastSwap > 0) {
int swap = 0;
for (int v = 0; v < lastSwap; v++)
if (vlista[v] > vlista[v+1]) {
int aux = vlista[v];
vlista[v] = vlista[v+1];
vlista[v+1] = aux;
swap = v;
}
lastSwap = swap;
}
if (!duplicatas) {
int s = 0;
for (int v = 0; v <= ultimo; v++)
if (vlista[s] != vlista[v]) {
s++;
vlista[s] = vlista[v];
}
ultimo = s;
}
}
}
Out[6]:
In [7]:
ListaUtil lu = new ListaUtil();
lu.adicionar(10);
lu.adicionar(5);
lu.adicionar(20);
lu.adicionar(5);
lu.adicionar(35);
lu.adicionar(35);
lu.adicionar(15);
lu.adicionar(10);
lu.adicionar(35);
lu.setDuplicatas(false);
lu.ordena();
System.out.println("Ordenado: " + lu);
Out[7]:
Alguem
Melissa
e Alcebiades
sobrescrevem o método getNome
de Alguem
In [8]:
public class Alguem {
public String getNome() {
return "alguem (genericamente)";
}
}
Out[8]:
In [9]:
public class Alcebiades extends Alguem {
public String getNome() {
return "Alcebiades";
}
}
Out[9]:
In [10]:
public class Melissa extends Alguem {
public String getNome() {
return "Melissa";
}
}
Out[10]:
Veja o código a seguir e descreva o que ele deve fornecer como saída (faça isso sem executá-lo):
Alguem a = new Alguem();
Alcebiades b = new Alcebiades();
Melissa c = new Melissa();
System.out.println("Nome a: " + a.getNome());
System.out.println("Nome b: " + b.getNome());
System.out.println("Nome c: " + c.getNome());
In [ ]:
super
super.metodo(…)
adicionar
de ListaEstatica
sobrescreve o mesmo método de Lista
adicionar
para guardar maior valor em cada adiçãosuper
super
faria uma chamada recursiva
In [11]:
public class ListaEstatistica extends Lista {
private int maiorValor = 0;
public void adicionar(int item) {
super.adicionar(item);
maiorValor = (item > maiorValor) ? item : maiorValor;
}
public double soma() {
double s = 0;
for (int l = 0; l <= ultimo; l++)
s += vlista[l];
return s;
}
public double media() {
return (ultimo >= 0)
? soma() / (ultimo+1) : 0;
}
public int maior() {
return maiorValor;
}
}
Out[11]:
In [12]:
ListaEstatistica le = new ListaEstatistica();
le.adicionar(10);
le.adicionar(20);
le.adicionar(5);
le.adicionar(35);
le.adicionar(15);
System.out.println("Soma: " + le.soma());
System.out.println("Media: " + le.media());
System.out.println("Maior: " + le.maior());
Out[12]:
super
super(…)
Lista
In [13]:
public class Lista {
protected int vlista[];
protected int ultimo = -1;
public Lista(int tamanho) {
vlista = new int[tamanho];
}
public void adicionar(int item) {
if (ultimo+1 < vlista.length) {
ultimo++;
vlista[ultimo] = item;
}
}
public String toString() {
String str = "";
for (int l = 0; l <= ultimo; l++)
str += vlista[l] + ((l < ultimo) ? ", " : "");
return str;
}
}
Out[13]:
In [14]:
public class ListaUtil extends Lista {
private boolean duplicatas = true;
public ListaUtil(int tamanho, boolean duplicatas) {
super(tamanho);
this.duplicatas = duplicatas;
}
public boolean getDuplicatas() {
return duplicatas;
}
public void setDuplicatas(boolean duplicatas) {
this.duplicatas = duplicatas;
}
public void ordena() {
int lastSwap = ultimo;
while (lastSwap > 0) {
int swap = 0;
for (int v = 0; v < lastSwap; v++)
if (vlista[v] > vlista[v+1]) {
int aux = vlista[v];
vlista[v] = vlista[v+1];
vlista[v+1] = aux;
swap = v;
}
lastSwap = swap;
}
if (!duplicatas) {
int s = 0;
for (int v = 0; v <= ultimo; v++)
if (vlista[s] != vlista[v]) {
s++;
vlista[s] = vlista[v];
}
ultimo = s;
}
}
}
Out[14]:
ListaEstatistica
ListaEstatistica
é obrigada a declarar construtor explícito
In [15]:
public class ListaEstatistica extends Lista {
private int maiorValor = 0;
ListaEstatistica(int tamanho) {
super(tamanho);
}
public void adicionar(int item) {
super.adicionar(item);
maiorValor = (item > maiorValor) ? item : maiorValor;
}
public double soma() {
double s = 0;
for (int l = 0; l <= ultimo; l++)
s += vlista[l];
return s;
}
public double media() {
return (ultimo >= 0)
? soma() / (ultimo+1) : 0;
}
public int maior() {
return maiorValor;
}
}
Out[15]:
In [16]:
ListaUtil lu = new ListaUtil(10, false);
lu.adicionar(10);
lu.adicionar(5);
lu.adicionar(20);
lu.adicionar(5);
lu.adicionar(35);
lu.adicionar(35);
lu.adicionar(15);
lu.adicionar(10);
lu.adicionar(35);
lu.ordena();
System.out.println("Ordenado: " + lu);
ListaEstatistica le = new ListaEstatistica(5);
le.adicionar(10);
le.adicionar(20);
le.adicionar(5);
le.adicionar(35);
le.adicionar(15);
System.out.println("Soma: " + le.soma());
System.out.println("Media: " + le.media());
System.out.println("Maior: " + le.maior());
Out[16]:
Escreva uma classe ListaOpera
herdeira de ListaEstatistica
que acrescente um método multiplica()
para multiplicar todos os itens da lista por um valor.
No construtor, deve ser informado um parâmetro fator
que indicará o fator de multiplicação. Este fator é guardado em atributo e será usado quando método multiplica()
que não recebe parâmetros.
In [ ]: