Boa tarde pessoal, sou novo aqui no fórum e iniciante em java…
Meu professor passou o seguinte exercício:
Entrar com um nome, idade e sexo de 20 pessoas. Imprimir o nome se a pessoa for do sexo masculino e tiver mais de 21 anos.
Eu não sei como fazer para ele listar o nome da pessoa se o sexo é masculino.
vou postar aqui o meu código:
[code]package exercicio10;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
String nome, sexo;
String opcao = "";
while (!opcao.equals("3")) {
Integer op = new Integer(JOptionPane.showInputDialog("1-Cadastrar, 2-Listar 3-Sair"));
while (op == 1) {
nome = JOptionPane.showInputDialog("Nome:");
Integer idade = new Integer(JOptionPane.showInputDialog("Idade:"));
sexo = JOptionPane.showInputDialog("Sexo:");
break;
}
if ( op == 2){
}
if (op == 3) {
System.exit(0);
}
}
}
}
Bom a sugestão que tenho para você é armazene tudo dentro de um array:
int tamanhoDoArray = 20;
Pessoa[] pessoas = new Pessoa[tamanho];
Sendo Pessoa uma classe onde você irá colocar, nome, idade, sexo,… e depois fazer um for para ir lendo sua entrada do teclado e armazenando até chegar ao final de seu array e depois disso retornar da classe Pessoa suas variáveis se sexo for masculino e idade maior que 21 usando um if.
Qdo o usuario digitar idade e sexo, vc os terá em variaveis… logo abaixo vc compara se essas variaveis tem o valor que deseja com um IF e mostra os dados… algo assim
Se idade > 21 e Sexo == Masculino,
Então Mostra o nome e idade
um detalhe: Seu codigo não está limitando a 20 cadastros. Recomendo que naquele while (!opcao.equals("3")) vc deixe assim:
while (!opcao.equals("3") && qtdCadastrados < 20)//Cria a qtdCadastrados e conforme for cadastrando soma 1 nela
Então gente obrigado pela ajuda!
olhem como eu fiz:
[code]package exercicio10;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
String nome, sexo;
String opcao = "";
int qtdCadastrados = 0;
while (!opcao.equals("2")) {
Integer op = new Integer(JOptionPane.showInputDialog("1-Cadastrar, 2-Sair"));
while (op == 1 && qtdCadastrados < 2) {
nome = JOptionPane.showInputDialog("Nome:");
Integer idade = new Integer(JOptionPane.showInputDialog("Idade:"));
sexo = JOptionPane.showInputDialog("Sexo M ou F:");
if (sexo == "M" && idade > 21) {
System.out.println("Nome: " +nome);
break;
}
}
if (op == 2) {
System.exit(0);
}
}
}
}[/code]
só q ele ta dando um pau… no qtdCadastrados eu colokei 2 para fazer um teste, mas ele não obedece só fica pedindo para inserir outro nome, idade etc…
o que será que pode ser?
o resto está correto?
Olha as condições para entrar no loop while (op == 1 && qtdCadastrados < 2) no laço vc não atualiza os valores, então essas condições sempre são válidas.
package exercicio10;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
String nome, sexo;
String opcao = "";
int qtdCadastrados = 0;
while (!opcao.equals("2")) {
Integer op = new Integer(JOptionPane.showInputDialog("1-Cadastrar, 2-Sair"));
while (op == 1 && qtdCadastrados < 20) { // para 20 registros
nome = JOptionPane.showInputDialog("Nome:");
Integer idade = new Integer(JOptionPane.showInputDialog("Idade:"));
sexo = JOptionPane.showInputDialog("Sexo M ou F:");
if (sexo == "M" && idade > 21) {
System.out.println("Nome: " +nome);
qtdCadastrados++;
op=JOptionPane.showInputDialog("1-Cadastrar, 2-Sair");
break;
}
}
if (op == 2) {
System.exit(0);
}
}
}
}
Olá, teste se é assim que você deseja.
Note que desta maneira, imprimirá na tela, em caso de maior de 21 anos, logo após armezenaro valor na varável.
Creio que a forma mais eficiente(sem a utilização de POO) seria com 3 arrays, como já foi postado.
Olá, teste se é assim que você deseja.
Note que desta maneira, imprimirá na tela, em caso de maior de 21 anos, logo após armezenaro valor na varável.
Creio que a forma mais eficiente(sem a utilização de POO) seria com 3 arrays, como já foi postado.[/quote]
Po, num sei pq fazer pro cara, bastava dar dicas e ele ir aprendendo e fazendo. Alem disso, seu código ta com erro de compilação, o showInputDialog() retorna String e o op é um Integer… Mesmo corrigindo o seu erro não funcionaria…
Henrique Petry Sempre que for comparar o valor de uma String, utilize o método equals(), no seu if:if (sexo == "M" && idade > 21) ele nunca vai entrar pq ele compara o endereço do objeto e não o valor, vc precisa usar assim: sexo.equals("M")