Duvida com While

1 resposta
java
Deivimbf

Boa tarde Amigos,

Sou iniciante e estou com dúvida nos comandos While / Do…While, segue a dúvida em que questão.

Tenho um exercicio de um curso online a seguir o qual a professora resolveu com o Do…While, fui tentar fazer com o while para exercitar e me deparei totalmente sem saida :worried:

Segue abaixo meu código (errado diga - se de passagem) e gostaria de saber se esse problema, é possivel de ser feito com o while e se problemas resolvidos com um podem ser resolvidos com o outro e vice-versa.

Um programa para validar as seguintes informações.

nome > 3 caracteres
idade > 0 e idade < 150
salario > 0
sexo ' f ' ou ' m '
estado civil 's' 'c' 'v' 'd'
package br.com.exercicios;

import java.util.Scanner;

public class Exercicios3 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		boolean validaCampo = true;
		
		System.out.println("Nome: ");
		String nome = sc.nextLine();
		
		System.out.println("Idade: ");
		int idade = sc.nextInt();
		
		System.out.println("Salário: ");
		double salario = sc.nextDouble();
		
		System.out.println("Sexo: ");
		char sexo = sc.next().charAt(0);
		
		System.out.println("Estado Civil: ");
		char estadoCivil = sc.next().charAt(0);
		
		while (!validaCampo) {
			if (nome.length() < 3) {
				validaCampo = false;
				System.out.println("Nome muito pequeno, digite novamente ");
				nome = sc.nextLine();
			} else if (idade <= 0 && idade > 150) {
				validaCampo = false;
				System.out.println("Idade maior que 0 e menor que 105, digite novamente ");
				idade = sc.nextInt();
			} else if (salario < 0) {
				validaCampo = false;
				System.out.println("Salario tem que ser maior que 0, digite novamente ");
				salario = sc.nextDouble();
			} else if (sexo != 'M' || sexo != 'F') {
				validaCampo = false;
				System.out.println("Caracteres têm que ser M - Masculino e F - Feminino, digite novamente ");
				sexo = sc.next().charAt(0);
			} else if ((estadoCivil != 's') || (estadoCivil != 'c') || (estadoCivil != 'v') || (estadoCivil != 'd')) {
				validaCampo = false;
				System.out.println("Caracteres têm que ser s , c , v ou d, digite novamente");
				estadoCivil = sc.next().charAt(0);
			}
			
			System.out.println("\nFlag ValidaCampo:" + validaCampo);
			System.out.println("\nNome:" + nome);
			System.out.println("Idade:" + idade);
			System.out.println("Salário:" + salario);
			System.out.println("Gênero:" + sexo);
			System.out.println("Estado Civil:" + estadoCivil);
			
			sc.close();
		}
	}
}

1 Resposta

darlan_machado

Poderia ter escrito: segue que segue a seguir a seguinte duvida.

Os laços while e do/while têm finalidades distintas.
Enquanto (!!!) que o while serve para executar algo enquanto uma condição não é atendida, independente de isso ocorre 0 ou mais vezes, o do/while sempre irá executar ao menos 1 vez.

Como você possui várias condições de validação, o ideal seria ter um do/while, realmente. Algo como:

do {
    //Repete até que todas as condições sejam satisfeitas.
} while (nome.length() <= 3&& idade <= 0 && idade >= 150); //Colocar as demais validações
Criado 24 de janeiro de 2020
Ultima resposta 24 de jan. de 2020
Respostas 1
Participantes 2