Ajuda com exercício! [RESOLVIDO]

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);
        }
        }
    }
}

[/code]

se alguém puder me ajudar, agradeço!

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.

Flw

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

Abrs.

Ve se realmente é isso que você precisa?

[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) {
           for (int i =0; i<=20;i++) {
            nome = JOptionPane.showInputDialog("Nome:");
            Integer idade = new Integer(JOptionPane.showInputDialog("Idade:"));
            sexo = JOptionPane.showInputDialog("Sexo:");
                    if (sexo == "m" && idade >21) {

              System.out.println ("NOME = " +nome);
             }}
            break;
        }
        if ( op == 2){
            
            
        }
        if (op == 3) {
            System.exit(0);
        }
        }
    }
}

[/code]

Coloca uma condição, se o que for digitado no JOptionPane for igual a masculino então escreva masculino, senão escreva feminino.

Oi,

Sei lá… algo do tipo:

[code]
String[] nome = new String[20];
char[] sexo = new char[20];
int[] idade = new int[20];

for (int i=0; i<20; i++) {

 nome[i] = JOptionPane.showInputDialog("Nome:");
 sexo[i] = JOptionPane.showInputDialog("Sexo M/F");
 idade[i] = Integer.parseInt(JOptionPane.showInputDialog("Idade");

}

for (int nm = 0; nm < nome.size(); nm++) {
if (sexo[nm] == ‘M’ && idade[nm] > 21) {

}

}[/code]

Tchauzin!

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?

Seu while ta entrando em loop infinito.

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.

[quote=mano8801]

op=JOptionPane.showInputDialog("1-Cadastrar, 2-Sair");

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")

Arrumei a parte do while, mais agora surgiu outro problema!
ele não está me mostrando os nomes cadastrados… :confused:
não sei o que pode ser!

vou postar aqui mais uma vez o código

[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 < 1) {

            nome = JOptionPane.showInputDialog("Nome:");
            Integer idade = new Integer(JOptionPane.showInputDialog("Idade:"));
            sexo = JOptionPane.showInputDialog("Sexo M ou F:");
            if (sexo == "M" && idade > 21) {

                JOptionPane.showMessageDialog(null, "Nome: " +nome);
                break;
            }
            qtdCadastrados = qtdCadastrados + 1;
        }
    if (op == 2) {
        System.exit(0);
    }
    }
}

}[/code]

Opá! agora funcionou com o equals no sexo…
eu não tinha visto as outras respostas do equals por isso postei denovo o código.

Mas, muito obrigado pela ajuda!
abraços!