[JAVA] Como mover os métodos da classe Principal para Aluno e que funcione ?

Olá gente, o código funciona perfeitamente, mas eu quero deixá-lo mais legível em relação a organização. Então, eu estou tentando mover o método cadastrar() e listarCadastros() para a classe Aluno e assim chamar na função main somente. Nesse sentido, como poderia proceder? (já fiz algumas tentativas mas nada)

package projeto;

import java.util.List;
import java.util.Scanner;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Principal {

private Scanner l;
private boolean execute;
private List<Aluno> alunos;

public static void main(String[] args) {
new Principal();
}

private Principal() {
l = new Scanner(System.in);
execute = true;
alunos = new ArrayList<Aluno>();

System.out.println("=============================\\nBEM VINDO AO CADASTRO DE USUÁRIOS\\n=============================");

while (execute) {
String opcao = menu();

if (opcao.equalsIgnoreCase("n")) {
cadastrar();
} else if (opcao.equalsIgnoreCase("l")) {
listarCadastros();
} else if (opcao.equalsIgnoreCase("x")) {
execute = false;
} else {
System.out.println("\\nOpção Inválida seu noob !!! \\n");
}
}
}

private String menu() {
System.out.println("Selecione a opção:\\n");
System.out.println("N - Novo cadastro");
System.out.println("L - Listar cadastros");
System.out.println("X - Sair\\n");
return l.nextLine();
}


private void cadastrar() {
boolean cadastrando = true;

while (cadastrando) {
System.out.println("=============================\\nCadastro de Usuários\\n");
Aluno aluno = new Aluno();
aluno.setNome(textInput(" --> Nome:"));
aluno.setCpf(textInput(" --> CPF: "));
aluno.setNascimento(textInput(" --> Data de Nascimento: "));
System.out.println("=============================\\n");

String cadastrar = textInput("==================\\nCONFIRMAR CADASTRO (S/N)?\\n==================");
if (cadastrar.equalsIgnoreCase("s")) {
System.out.println("==================\\n STATUS: Adicionado com sucesso \\n==================\\n");
alunos.add(aluno);
} else if (cadastrar.equalsIgnoreCase("n")){
System.out.println("==================\\n STATUS: Cadastro Ignorado\\n==================\\n");
} else {
System.out.println("\\nOpção inválida seu noob, vou ignorar o cadastro só pra você ter que digitar denovo !!! \\n");
}

String continua = textInput("Continuar cadastrando (S/N) ?");
if (continua.equalsIgnoreCase("N")) {
cadastrando = false;
} else if (continua.equalsIgnoreCase("s")){

} else {
System.out.println("\\nOpção inválida seu noob, eu vou sair só porque você não colabora !!! \\n");
cadastrando = false;
}
}
}

private void listarCadastros() {
if (alunos.size() == 0) {
System.out.println("\\nNão existem cadastros !!!\\n");
} else {
System.out.println("==================================\\nLista de Cadastros\\n");
for (int i = 0; i < alunos.size(); i++) {
Aluno d = alunos.get(i);
System.out.println("Cadastro número: " + i);
System.out.println("\\tNome: " + d.getNome());
System.out.println("\\tCPF: " + d.getCpf());
System.out.println("\\tData de Nascimento: " + d.getNascimento() + "\\n");
}
System.out.println("\\nLista Finalizada\\n==================================\\n");
}
}

private String textInput(String label) {
System.out.println(label);
return l.nextLine();
}
}
_________________________

package projeto;

public class Aluno {

private String nome;
private String cpf;
private String nascimento;


public Aluno(){


}

public String getNome(){
return nome;
}

public void setNome(String name){
this.nome = name;
}

public String getCpf(){
return cpf;
}

public void setCpf(String cpf){
this.cpf = cpf;
}

public String getNascimento(){
return nascimento;
}

public void setNascimento(String nascimento){
this.nascimento = nascimento;
}



}

Eu te recomendaria descrever também quais foram as tentativas e por que não deram certo. Sua pergunta ficou bem vaga.

Mas vamos lá, no seu caso não é possível fazer o que você quer. os dois métodos que você citou trabalham em cima de uma lista de Aluno, portanto a classe Aluno que abstrai as informações de um único aluno não poderia conter uma lista de alunos.

O que você pode fazer é criar uma classe Alunos que possui internamente essa List<Aluno> e mover os métodos para lá

1 curtida

Essa foi uma das minhas tentativas:

package projeto;

import java.util.List;
import java.util.Scanner;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Principal {

	private Scanner l;
	private boolean execute;
	private List<Aluno> alunos;

	public static void main(String[] args) {
		new Principal();
	}

	private Principal() {
		l = new Scanner(System.in);
		execute = true;
		alunos = new ArrayList<Aluno>();
		Aluno aluno = new Aluno();

		System.out.println("=============================\nBEM VINDO AO CADASTRO DE USUÁRIOS\n=============================");

		while (execute) {
			String opcao = menu();

			if (opcao.equalsIgnoreCase("n")) {
				aluno.cadastrar();
			} else if (opcao.equalsIgnoreCase("l")) {
				aluno.listarCadastros();
			} else if (opcao.equalsIgnoreCase("x")) {
				execute = false;
			} else {
				System.out.println("\nOpção Inválida seu noob !!! \n");
			}
		}
	}



	private String menu() {
		System.out.println("Selecione a opção:\n");
		System.out.println("N - Novo cadastro");
		System.out.println("L - Listar cadastros");
		System.out.println("X - Sair\n");
		return l.nextLine();
	}
	


	private String textInput(String label) {
		System.out.println(label);
		return l.nextLine();
	}
}

package projeto;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

public class Aluno {
	
	   private String nome;
	   private String cpf;
	   private String nascimento;
	   private List<Aluno> alunos
	   = new ArrayList<Aluno>();
	    
	   
	   public Aluno(){
	   
	   
	   }
	   
	   public String getNome(){
	   return nome;
	   }
	   
	   public void setNome(String name){
	   this.nome = name;
	   }
	   
	   public String getCpf(){
	   return cpf;
	   }
	   
	   public void setCpf(String cpf){
	   this.cpf = cpf;
	   }
	   
	   public String getNascimento(){
	   return nascimento;
	   }
	   
	   public void setNascimento(String nascimento){
	   this.nascimento = nascimento;
	   }
	   
	   void cadastrar() {
			boolean cadastrando = true;

			while (cadastrando) {
				System.out.println("=============================\nCadastro de Usuários\n");
				Aluno aluno = new Aluno();
				aluno.setNome(JOptionPane.showInputDialog(" --> Nome:"));
				aluno.setCpf(JOptionPane.showInputDialog(" --> CPF: "));
				aluno.setNascimento(JOptionPane.showInputDialog(" --> Data de Nascimento: "));
				System.out.println("=============================\n");

				String cadastrar = JOptionPane.showInputDialog("==================\nCONFIRMAR CADASTRO (S/N)?\n==================");
				if (cadastrar.equalsIgnoreCase("s")) {
					System.out.println("==================\n STATUS: Adicionado com sucesso  \n==================\n");
					alunos.add(aluno);
				} else if (cadastrar.equalsIgnoreCase("n")){
					System.out.println("==================\n STATUS: Cadastro Ignorado\n==================\n");
				} else {
					System.out.println("\nOpção inválida seu noob, vou ignorar o cadastro só pra você ter que digitar denovo !!! \n");
				}

				String continua = JOptionPane.showInputDialog("Continuar cadastrando (S/N) ?");
				if (continua.equalsIgnoreCase("N")) {
					cadastrando = false;
				} else if (continua.equalsIgnoreCase("s")){
					
				} else {
					System.out.println("\nOpção inválida seu noob, eu vou sair só porque você não colabora !!! \n");
					cadastrando = false;
				}
			}
		}

		void listarCadastros() {
			if (alunos.size() == 0) {
				System.out.println("\nNão existem cadastros !!!\n");
			} else {
				System.out.println("==================================\nLista de Cadastros\n");
				for (int i = 0; i < alunos.size(); i++) {
					Aluno d = alunos.get(i);
					System.out.println("Cadastro número: " + i);
					System.out.println("\tNome: " + d.getNome());
					System.out.println("\tCPF: " + d.getCpf());
					System.out.println("\tData de Nascimento: " + d.getNascimento() + "\n");
				}
				System.out.println("\nLista Finalizada\n==================================\n");
			}
		}
	 
	   

}

A classe Aluno precisa da classe Principal porque é nessa última que está o método de “entrada/start” (o main) do programa. Se tu mover o método main (e os demais métodos e variáveis) para a classe Aluno, a classe Principal deixa de ser necessária.

1 curtida