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