em primeiro lugar, repare que você está passando uma variável pistao para o método add e essa variável está vindo na assinatura do construtor. Você está inserindo várias vezes o mesmo objeto. Acredito que você queira, na verdade, dar um add da variável local pista.
Outro ponto é que não está mostrado no trecho de código que você colocou, como a variável pist é instanciada e nem como você está verificando quantos elementos existem dentro dela. Coloca o resto do código pra gente verificar.
E, por último, não é uma boa prática construir o for do jeito que você fez. Perceba que a condição de parada muda a cada instante e isso não é bom por diversos motivos (desde legibilidade, performance do otimizador, características determinísticas e outras).
O melhor é você instanciar uma variável antes do for com um valor de parada e depois comparar lá dentro. Algo como
int j = (int)(4 + Math.random() * 3);
for (int i=0; i<j; i++) {etc}
Mas, uma sugestão melhor em termos de design e testabilidade de código é: ao invés de fazer como eu coloquei acima, receber no construtor a quantidade de pistões que você quer criar e deixar para quem chama o construtor a responsabilidade de decidir quantos ele quer. Dessa forma, você pode até colocar os seus valores aleatórios como você quer, como também colocar um valor fixo pra testar se está funcionando corretamente.
public class Motor {
ArrayList pist = new ArrayList();
int potencia=(int)(4 + Math.random() * 12);
Eixo eixo = new Eixo();
BombaCombustivel bomba = new BombaCombustivel();
int qtd_pistao = (int)(4 + Math.random() * 3);
[code]public class Pistao {
private int diametro;
public int tempoVida;
public Pistao(){}
public Pistao(int qtd){}
public Pistao(int diametro,int tempoVida){
this.diametro=diametro;
this.tempoVida=tempoVida;
}
public int getDiametro() {
return diametro;
}
public void setDiametro(int diametro) {
this.diametro = diametro;
}
public int getTempoVida() {
return tempoVida;
}
public void setTempoVida(int tempoVida) {
this.tempoVida = tempoVida;
}[/code]
System.out.println("Quantidade de Pistão..: " + car.getQtdPistao() );
[/code][code]public class Carro extends Veiculo{
Motor motor = new Motor();
protected int quilometragem = (int) (1 +Math.random() * 2000);
public Proprietario p = new Proprietario();
public String getCor(){
return pintura.cor;
}
//Metalico
public boolean isMetalico(){
return pintura.isMetalico();
}
//potencia
public int getPotencia(){
return motor.potencia;
}
//Quantidade de pistoes
public int getQtdPistao(){
return motor.qtd_pistao;
}
//pistao
public Pistao getPistao(int id){
return motor.pist.get(id);
}
//quilometragem
public int getQuilometragem() {
return quilometragem;
}
//Nome do proprietario
public String getNomeProprietario(){
return p.getNome();
} @Override
public int getAno(){
return super.getAno();
o motor do seu carro está sendo instanciado com o construtor default. Esse construtor default nao é aquele que tem o for. Esse construtor default nao faz nada. Por isso fica sempre 0