Ajuda com questão do exercício

Pessoal estou começando a parte de java (uso o netbeans ide) e me foi passado o seguinte exercício:

Faça um programa em Java para ler o código do sexo (1 = Masculino e 2 = Feminino) e a altura de cada uma das 8 pessoas de um determinado grupo. Determine e imprima:
a) A altura do homem mais baixo;
b) A altura da mulher mais alta

Eu tentei de todo jeito fazer, mas sempre uma variável acaba substituindo a outra, o que eu tentei fazer até agora e não sai disso foi:

[code]int sexo,i, aux=0, aux3=0;
double alt, aux2=0,aux4=0, menor=0, maior=0,n;
Scanner entrada = new Scanner( System.in);

for(i=1; i<=8;i=i+1){

System.out.print("informe o sexo: ");
sexo = entrada.nextInt();
System.out.print("informe a altura: ");
alt = entrada.nextDouble();
menor=alt;
maior=alt;
aux2=menor;

if(aux==1 & aux2 <= alt){
menor=aux2;}

if( aux==1 & aux2 >= alt){
menor=alt;}

if(aux3==2 & aux4 >= alt){
maior=aux4;}

if( aux3==2 & aux4 <= alt){
maior=alt;}

aux=aux-aux;
aux3=aux3-aux3;
}

System.out.println("Altura do homem mais baixo: "+ menor);
System.out.println("Altura da mulher mais alta: "+ maior);

}
}
[/code]

Alguém pode me ajudar?

seus ifs estão meio bagunçados e dava pra reduzir o número de variaveis tipo:

alias, use a tag code pq facilita a leitura



alt = entrada.nextDouble(); 

if( sexo == 1){//homem
    //verifica se a altura lida é a menoraté o momento
    if( alt < alturaH )
        alturaH = alt;
}
else{//mulher
    //verifica se a altura lida é a maior até o momento
    if( alt > alturaM )
        alturaM = alt;
}

System.out.println("Altura do homem mais baixo: "+ alturaH ); 
System.out.println("Altura da mulher mais alta: "+ alturaM );

e nao esqueça de colocar em tag CODE fica mais facil pra analisarmos

não é ‘&’, é ‘&&’

Por incrível que pareça, o “&” também funciona, mas ele tem um problema sério - ele insiste em avaliar os dois lados, o esquerdo e o direito. Portanto, o código abaixo funciona corretamente se s for null

String s = ...;
if (s != null && s.length() > 0) 
    ...

mas o código aparentemente equivalente abaixo vai crashar com um NullPointerException se s for null.

String s = ...;
if (s != null & s.length() > 0) 
    ...

Portanto, em 99% do tempo, você usa “&&” em vez de “&”.

Por incrível que pareça, o “&” também funciona, mas ele tem um problema sério - ele insiste em avaliar os dois lados, o esquerdo e o direito. Portanto, o código abaixo funciona corretamente se s for null

String s = ...;
if (s != null && s.length() > 0) 
    ...

mas o código aparentemente equivalente abaixo vai crashar com um NullPointerException se s for null.

String s = ...;
if (s != null & s.length() > 0) 
    ...

Portanto, em 99% do tempo, você usa “&&” em vez de “&”. [/quote]

&& e || são operadores que atuam com curto-circuito.

Para o &&, se o primeiro operando for false, ele não avalia o segundo, visto que independente do segundo, o resultado sempre será false.
Para o || a mesma coisa. Se o primeiro operando for true, independente do segundo, o resultado sempre será true.

Já o & e o | analisam sempre os dois operandos, mesmo que o resultado seja já definido no primeiro.

Tem um pessoal que explica melhor aqui: http://www.guj.com.br/java/58646-diferenca-entre-os-operadores-logico–e-

Bom galera realmente tava bagunçado, tentei como colocaram ai, mas não foi. Eu tentei arrumar um pouco e mudar algumas coisas, mas sempre na volta do comando for o valor da altura digitado para homem está substituindo mesmo sendo maior. Como tentei:

[code]int sexo,i;
double alt, alturaH=0,alturaM=0;
Scanner entrada = new Scanner( System.in);

for(i=1; i<=8;i=i+1){

System.out.print("informe o sexo: ");
sexo = entrada.nextInt();
System.out.print("informe a altura: ");
alt = entrada.nextDouble();

if( sexo == 1){
//atribui a altura ao sexo masculino
alturaH=alt;
}
if (sexo==2){
//atribui a altura ao sexo feminino
alturaM=alt;
}

System.out.print("informe o sexo: ");
sexo = entrada.nextInt();
System.out.print("informe a altura: ");
alt = entrada.nextDouble();

//verifica se a altura lida é a menor até o momento
if( sexo == 1 & alt < alturaH){
alturaH=alt;
}
//verifica se a altura lida é a maior até o momento
if( sexo == 2 & alt > alturaM){
alturaM=alt;
}
}
System.out.println("Altura do homem mais baixo: "+ alturaH );
System.out.println("Altura da mulher mais alta: "+ alturaM );
}
}
[/code]

E ai galera? :frowning:

[quote=neoreload]Bom galera realmente tava bagunçado, tentei como colocaram ai, mas não foi. Eu tentei arrumar um pouco e mudar algumas coisas, mas sempre na volta do comando for o valor da altura digitado para homem está substituindo mesmo sendo maior. Como tentei:

[code]int sexo,i;
double alt, alturaH=0,alturaM=0;
Scanner entrada = new Scanner( System.in);

for(i=1; i<=8;i=i+1){

System.out.print("informe o sexo: ");
sexo = entrada.nextInt();
System.out.print("informe a altura: ");
alt = entrada.nextDouble();

if( sexo == 1){
//atribui a altura ao sexo masculino
alturaH=alt;
}
if (sexo==2){
//atribui a altura ao sexo feminino
alturaM=alt;
}

System.out.print("informe o sexo: ");
sexo = entrada.nextInt();
System.out.print("informe a altura: ");
alt = entrada.nextDouble();

//verifica se a altura lida é a menor até o momento
if( sexo == 1 & alt < alturaH){
alturaH=alt;
}
//verifica se a altura lida é a maior até o momento
if( sexo == 2 & alt > alturaM){
alturaM=alt;
}
}
System.out.println("Altura do homem mais baixo: "+ alturaH );
System.out.println("Altura da mulher mais alta: "+ alturaM );
}
}
[/code]

E ai galera? :([/quote]

Na sua linha 27 você está dizendo que se o homem tiver a altura menor ( < ) que a altura maior registrada até então, ela será substituída. Não teria que ser maior( > )?

Veja a diferença entre o IF masculino e o IF feminino…

:wink:

Ah e outra dica!

Procure nomear suas variáveis mais sugestivamente. alt, altM, altH é muito genérico, pode ser qualquer coisa. Não tenha medo de atribuir nomes mais completos para as variáveis. É pra isso que existe o atalho CTRL+Space…