Ajuda com questão do exercício

7 respostas
N

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:

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

}
}

Alguém pode me ajudar?

7 Respostas

M

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

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

J

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

E

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 “&”.

S

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 “&”.

&& 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-

N

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:

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

E ai galera? :(

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

E ai galera? :(

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...

Criado 1 de novembro de 2012
Ultima resposta 5 de nov. de 2012
Respostas 7
Participantes 7