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:
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);
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 );
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.
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:
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]
[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:
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…
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…