Boa Tarde Pessoal, sou novo no universo java, estou no 2º período de sistema.
A dúvida é o seguinte.
Preciso validar um campo onde checa se o apartamento contém morador ou não. No caso do meu raciocínio quero que quando ele retornar o valor existente no meu array, ele entra em loop e retorna a pedir o número do apê.
Olha o código .
System.out.println("\n :::COOCAR MORADOR EM APARTAMENTO:::\n");
Morador mora = new Morador();
boolean moradorNoApe = false;
System.out.print("Qual Apartamento Deseja Reservar ?: ");
int reservaAp = Integer.parseInt(leitura.nextLine());
int validaApe;
for (int j = 0; j < apartamentos.length; j++) {
if (apartamentos[j].getNumero() == reservaAp) {
validaApe = apartamentos[j].getNumero();
if (apartamentos[j].getNumero() != validaApe) {
System.out.println("*** APARTAMENTO JÁ CONTÉM MORADOR ***");
return;
} else {
}
}
}
em especial eu não utilizei minha variável boolean, não percebi necessidade no momento.
E por falta de conhecimento eu não sei se o comando Return pode fazer isso, deduzi pela tradução kkk …
eu costumo usar o “do while” para tipos de validações, mas se caso o return é capaz, por favor, me deem dicas !
return serve pra duas coisas
- se o metodo tem um tipo, vc retorna aquele tipo
public int dobro(int valor){ return 2 * valor ; }
// uso
int valor = dobro( 4 ); // valor agora tem 8
2 se o metodo não tem tipo ( void ). ai vc interrompe o metodo.
util se vc quer terminar uma sequencia logica, interromper varios loops, etc.
no seu exemplo, o return interrompe todo o metodo.
se vc quer interromper um loop, vc tem uma palavra reservada chamada break;
isso vai interromper um loop mais ‘interno’. se vc tem mais de um loop e quer terminar tudo vc pode usar um LABEL mas isso é uma outra historia.
veja se no seu caso um break não faz mais sentido.
Primeiramente @peczenyj Quero te agradecer por responder e tirar dúvida em relação ao “return”.
Bom vamos ao caso.
Eu fiz a validação de trocar o método return para break e ele consequentemente pula para o método de baixo que no meu caso seria pedir o nome do morador.
Bem, estou com um código bastante aprendiz e estou trabalhando para melhorá-lo.
Veja o código por mais completo.
static public void colocarMoradoremApartamento() {
System.out.println("\n :::COOCAR MORADOR EM APARTAMENTO:::\n");
Morador mora = new Morador();
boolean moradorNoApe = false;
System.out.print("Qual Apartamento Deseja Reservar ?: ");
int reservaAp = Integer.parseInt(leitura.nextLine());
int validaApe;
for (int j = 0; j < apartamentos.length; j++) {
if (apartamentos[j].getNumero() == reservaAp) {
validaApe = apartamentos[j].getNumero();
if (apartamentos[j].getNumero() != validaApe) {
System.out.println("*** APARTAMENTO JÁ CONTÉM MORADOR ***");
break;
} else {
}
}
}
for (int i = 0; i < apartamentos.length; i++) {
if (apartamentos[i].getNumero() == reservaAp) {
System.out.print("Digite o nome do novo morador: ");
mora.setNome(leitura.nextLine());
//VALIDA O CODIGO JA EXISTENTE
int validacao;
System.out.print("Digite o código do Sr(a). " + mora.getNome() + ": ");
mora.setCodigo(Integer.parseInt(leitura.nextLine()));
validacao = mora.getCodigo();
for (int j = 0; j < apartamentos.length; j++) {
if (apartamentos[i].getMorador() != null) {
if (apartamentos[i].getMorador().getCodigo() == validacao) {
System.out.println("*** Código já existente ***");
break;
} else {
}
}
}
System.out.print("Digite a idade: do Sr(a). " + mora.getNome() + ": ");
mora.setIdade(Integer.parseInt(leitura.nextLine()));
System.out.print("O(a) Sr(a)" + mora.getNome() + " é casado(a) ?: ");
mora.setCasado(Boolean.parseBoolean(leitura.nextLine()));
if (mora.isCasado() == true) {
System.out.print("Qual o nome da marido ou esposa?: ");
mora.setParceiro(leitura.nextLine());
}
System.out.print("Digite a Quantidade de filhos: ");
mora.setQuantFilhos(Integer.parseInt(leitura.nextLine()));
apartamentos[i].setMorador(mora);
moradorNoApe = true;
System.out.println("\n ***MORADOR CADASTRADO COM SUCESSO***\n");
}
}
}
Seu código não “pula” de um método para outro.
Ele simplesmente interrompe um laço para entrar em outro
Eai @staroski, vejo você direto respondendo as duvidas do pessoal ai, parabéns ai pela dedicação ai sempre.
Sim, básicamente essa é a lógica do código né.
Mas vamos a minha questão !
Preciso validar o campo de numeração do apartamento se caso ele já conter algum morador, ele repete o processo de busca do número do apartamento .
Tem alguma dica valiosa para me fornecer ?
tipo um “do while” ou algum laço de repetição que faça essa validação !?
Segue exemplo hipotético:
public class Exemplo {
private static final Scanner IN = new Scanner(System.in);
public static void main(String[] args) {
Exemplo exemplo = new Exemplo();
exemplo.colocarMoradoremApartamento();
}
private final Apartamento[] apartamentos = // sei lá como você inicializa seus apartamentos */
public void colocarMoradoremApartamento() {
System.out.println("Colocar morador em apartamento");
Apartamento apartamento = selecionaApartamento();
Morador morador = cadastraMorador();
apartamento.setMorador(morador);
}
private int cadastraCodigo(String nome) {
int codigo = -1;
do {
System.out.print("Digite o código do Sr(a). " + nome + ": ");
codigo = Integer.parseInt(IN.nextLine());
} while (!codigoValido(codigo));
return codigo;
}
private Morador cadastraMorador() {
System.out.print("Digite o nome do novo morador: ");
String nome = IN.nextLine();
int codigo = cadastraCodigo(nome);
System.out.print("Digite a idade: do Sr(a). " + nome + ": ");
int idade = Integer.parseInt(IN.nextLine());
System.out.print("O(a) Sr(a)" + nome + " é casado(a) ?: ");
boolean casado = Boolean.parseBoolean(IN.nextLine());
String parceiro = null;
if (casado) {
System.out.print("Qual o nome da marido ou esposa?: ");
parceiro = IN.nextLine();
}
System.out.print("Digite a Quantidade de filhos: ");
int filhos = Integer.parseInt(IN.nextLine());
Morador morador = new Morador();
morador.setNome(nome);
morador.setCodigo(codigo);
morador.setIdade(idade);
morador.setCasado(casado);
morador.setParceiro(parceiro);
morador.setQuantFilhos(filhos);
System.out.println("Morador cadastrado com sucesso");
return morador;
}
private boolean codigoValido(int codigo) {
for (int i = 0; i < apartamentos.length; i++) {
Morador morador = apartamentos[i].getMorador();
if (morador != null && morador.getCodigo() == codigo) {
System.out.println("*** Código já existente ***");
return false;
}
}
return true;
}
private Apartamento selecionaApartamento() {
while (true) {
System.out.print("Qual apartamento deseja reservar ?: ");
int numero = Integer.parseInt(IN.nextLine());
Apartamento apartamento = validaApartamento(numero);
if (apartamento != null) {
return apartamento;
}
System.out.println("Apartamento ocupado!");
}
}
private Apartamento validaApartamento(int numero) {
for (int i = 0; i < apartamentos.length; i++) {
if (numero == apartamentos[i].getNumero() && apartamentos[i].getMorador() == null) {
return apartamentos[i];
}
}
System.out.println("Apartamento invalido!");
return null;
}
}