Estou aprendendo Java no meu curso por agora, mas não tenho muita facilidade. Estou tentando ler o código todo para ver se consigo entender mais a lógica, mas tem partes que não entendi. Criamos uma classe Pilha
public class Pilha
{
private Object[] item;
private int inicio = 0,
fim = -1,
qtd = 0;
public Pilha (int capacidade) throws Exception
{
if (capacidade<=0)
{
Exception erro;
erro = new Exception ("Capacidade invalida");
throw erro;
}
this.item = new Object [capacidade];
for(int i=0; i<this.item.length; i++)
this.item[i]=null;
}
// Nessa parte não entendo o for (que na verdade sempre foi meio difícil de entrar na minha cabeça)
public void guardeUmItem (X x) throws Exception
{
if (x==null)
throw new Exception ("Guardar oque?");
if (this.qtd==this.item.length)
throw new Exception ("Nao cabe mais nada");
this.fim++;
if (this.fim==this.item.length)
this.fim = 0;
this.item[this.fim] = x;
this.qtd++;
}
// Já nessa parte não entendi o porquê de o this.fim ficar = 0
E essa parte: this.item[this.fim] = x; significa que o que o usuário digitou está sendo adicionado ao vetor com o valor que ele passou?
Se alguém puder ajudar, agradeço
O código acima só faz com que todas as posições do vetor item se tornem nulas, é uma inicialização deste vetor.
Se sua variável fim esta igual ao tamanho do seu vetor significa que se vetor esta cheio.
E estando cheio seu algoritmo começa a sobrescrever nas primeiras posições do seu vetor.
Posso estar errado mas acho que é isso que acontece.
1 curtida
O que comentou acima está correto, toda vez que você chama o método “pilha”, ele faz com que no veto item tenha a quantidade de posições baseadas na capacidade que foi passada como parâmetro, ainda na mesma estrutura é criado um “for” que é uma estrutura de repetição para garantir que todas as posições do vetor se tornem vazias, pois se não fizer isso, pode ser pego lixo de memória e algumas posições desse vetor já virem com valor. no método guardeUmItem, primeiro é verificado se o item é nulo, assim não fazendo sentido guarda-lo, depois é verificado se ainda tem quantidade de itens sobrando no vetor para poder ser guardado, depois é verificado se o fim é igual a capacidade do vetor item, se for torna o fim como 0 e ao final se nao cair nos IFs adiciona o item na posição respectiva do vetor.
2 curtidas
O for é dividido em 3 partes por um “;”.
for ( parte1 ; parte2 ; parte3 ) { /* ... */ }
-
A parte1 é executada apenas uma vez quando o loop começa. Nela vc pode criar e inicializar variáveis como foi feito no seu código em que foi criada a variável “i” e foi dada a ela o valor 0.
-
A parte2 deve ser uma expressão que retorne true ou false. Ela é executada uma vez no inicio de cada iteração para ver se o loop deve ou não continuar sendo executado.
Seu código diz “execute o loop enquanto i for menor que a capacidade total do array item”.
Digamos que seu array possui capacidade 10. Vai ter uma hora que i será 10. 10 não é menor que 10, logo, a expressão retornará false e o loop não prosseguirá.
- A parte3 é executada uma vez ao fim de cada iteração. No seu código, a variável i deve ser incrementada. Dessa forma vc estabelece um controle sobre até quando seu loop deve ir. Se essa parte não estivesse ali, seu loop seria infinito, pois o valor de i nunca aumentaria e, dessa,forma, sempre seria menor que a capacidade do array.
A única observação a se fazer aqui é que esse for faz exatamente o que o @Vinicius_Salles disse, inicializa cada elemento do array, contudo, ele é desnecessário, pois, por padrão, de acordo com a especificação, o Java já se encarrega de fazer isso pra vc de forma automática.
10.3. Array Creation
-
An array is created by an array creation expression (§15.10.1) or an array initializer (§10.6).
-
An array creation expression specifies the element type, the number of levels of nested arrays, and the length of the array for at least one of the levels of nesting. The array’s length is available as a final instance variable length.
-
An array initializer creates an array and provides initial values for all its components.
Ou seja, sempre que vc cria um array, todos os seus elementos já são inicializado com valores padrão, que no caso do seu código é null mesmo.
Vc pode fazer o teste acrescentando um println como no código abaixo:
for(int i = 0; i < this.item.length; i++)
this.item[i] = null;
for(int i = 0; i < this.item.length; i++)
System.out.println( this.item[i] );
Análise a saída dele e em seguida comente o primeiro for e faça a comparação.
// for(int i = 0; i < this.item.length; i++)
// this.item[i] = null;
for(int i = 0; i < this.item.length; i++)
System.out.println( this.item[i] );
1 curtida
Obrigada, me ajudou bastante