Como usar objeto de uma função dentro de outra função?

Olá, estou aprendendo POO e fazendo um exercício da faculdade porém estou tendo bastante dificuldade.

Estou criando um sistema de Trens, onde posso criar um trem, onde ele tem Locomotivas, vagões, etc.

Primeiro criei um menu com Switch case (pseudo código):

case 1:
criarTrem();
case 2:
editarTrem();
case 3:
listarTrens();
case 4:
fechar programa();

Para cada “case” eu criei uma função, e na função criarTrem() eu instancio Objetos:
Trem, Locomotiva, vagão e atribuo valores aos seus atributos, etc.

Locomotiva locomotiva = new Locomotiva(idLocomotiva, capacidadeCarga, capacidadeVagoes);
Trem trem = new Trem(idTrem);

Porém, agora estou tentando criar a segunda opção, editarTrem(), a idéia é que eu informe o ID do meu trem, então eu possa fazer as respectivas alterações como, inserirVagao(), removerVagao(), assim criando OUTRO menu dentro desta opção.

O problema é:
Meu trem, locomotivas e vagões foram instanciados dentro da primeira função “criarTrem()”, agora quero poder edita-la mas não sei como trazer esses objetos e seus atributos para dentro do escopo da minha segunda função “editarTrem()”.

Estas funções estão sendo criadas todas dentro da mesma classe Principal do código.

O que você precisa é de uma lista, fora do escopo da função criarTrem(), que armazene todos os trens instanciados:

private List<Trem> trens = new ArrayList<Trem>();

public void criarTrem(){
    Trem trem = new Trem(22);
    this.trens.add(trem);
}

Para recuperar esse trem pelo ID, usariamos um foreach:

Trem trem22 = null;

for (Trem trem : trens){
    if (trem.getId() === 22)
        trem22 = trem;
}

Desculpem qualquer erro, faz tempo que não mexo com java rs.

2 curtidas

Consegui, muito obrigado!