Desafio Java
Conversão de temperatura com casting e formatação
Enunciado
Crie um programa que converta uma temperatura de Celsius para Fahrenheit usando a fórmula F = C * 9/5 + 32. A temperatura Celsius deve ser um double com valor 36.6. O resultado Fahrenheit deve ser arredondado para inteiro usando casting explícito e impresso no formato Fahrenheit: XX (sem casas decimais).
Requisitos
- Declare
double celsius = 36.6. - Calcule
fahrenheit = celsius * 9 / 5 + 32usando promoção numérica. - Converta o resultado para
intcom casting explícito. - Imprima exatamente
Fahrenheit: 97.
Código inicial
public class ConversaoTemperatura {
public static void main(String[] args) {
double celsius = 36.6;
// Calcule e imprima
}
}
Saída esperada
Fahrenheit: 97
Ver dica
A fórmula gera um double. Use (int) para truncar a parte decimal. 36.6 * 9 / 5 + 32 = 97.88, que truncado é 97.
Mostrar solução
public class ConversaoTemperatura {
public static void main(String[] args) {
double celsius = 36.6;
double fahrenheit = celsius * 9 / 5 + 32; // promoção: 9/5 é int? Não, 9 e 5 são int, mas celsius é double, então tudo vira double
int fahrenheitInt = (int) fahrenheit; // casting trunca
System.out.println("Fahrenheit: " + fahrenheitInt);
}
}
Passo a passo
- Declaramos
celsiuscomodoublecom valor 36.6. - Na expressão
celsius * 9 / 5 + 32, a multiplicaçãocelsius * 9promove9paradouble, resultando em329.4. - A divisão
329.4 / 5resulta em65.88(double). - Somamos
32, obtendo97.88. - Aplicamos o casting
(int)para converter97.88em97, truncando a parte decimal. - Imprimimos
Fahrenheit: 97.
Por que funciona
A promoção numérica converte automaticamente int para double quando misturados, garantindo que a divisão 9 / 5 não seja inteira (o que daria 1). O casting explícito (int) trunca o valor, descartando a parte fracionária, conforme pedido.
Erros comuns
- Fazer
9 / 5antes de multiplicar:celsius * (9 / 5) + 32resultaria emcelsius * 1 + 32 = 68.6, pois9/5é divisão inteira. Use9.0 / 5ou garanta que a multiplicação ocorra primeiro. - Esquecer o casting: imprimir diretamente
fahrenheitmostraria97.88, não o inteiro. - Usar
Math.roundem vez de casting:Math.roundarredondaria para 98, mas o enunciado pede truncamento com casting.
Outra forma de resolver
Usar Math.round para arredondar em vez de truncar:
int fahrenheitInt = (int) Math.round(fahrenheit);
Isso daria 98, então não atende ao requisito de truncar.
Saída esperada
Fahrenheit: 97