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]:
AlguemMelissa 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 [ ]:
supersuper.metodo(…)
adicionar de ListaEstatica sobrescreve o mesmo método de Listaadicionar para guardar maior valor em cada adiçãosupersuper 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]:
supersuper(…)
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]:
ListaEstatisticaListaEstatistica é 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 [ ]: