每日一练73——Java Grasshopper调试摄氏转换器(

2018-08-13  本文已影响0人  砾桫_Yvan

题目

你的朋友出国旅行到美国所以他写了一个程序,将华氏温度转换为摄氏温度。不幸的是他的代码有一些错误。

查找代码中的错误以使摄氏转换器正常工作。

要将华氏温度转换为摄氏温度:

celsius = (fahrenheit - 32) * (5/9)

请记住,当前天气条件下的温度通常以整数给出。温度传感器可以以更高的精度报告温度,例如最接近的十分之一。虽然仪器误差使得这种精度对于许多类型的温度测量传感器来说都是不可靠的。

测试用例:

import java.util.Random;
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class GrassHopperTest {
    
    @Test
    public void testA() {
        assertEquals("10.0 is above freezing temperature", GrassHopper.weatherInfo(50));
    }
    @Test
    public void testB() {
        assertEquals("-5.0 is freezing temperature", GrassHopper.weatherInfo(23));
    }
}

题目:

public class GrassHopper {

    public static String weatherInfo(int temp) {
        double c : convert(temp);
        if (c > 0)
            return (c + " is freezing temperature");
        else
            return (c + " is above freezing temperature");
    }

    public static int convertToCelsius(int temperature) {
        int celsius = (tempertur) - 32 + (5/9.0);
        return temperature;
    }
}

解题

My

public class GrassHopper {

    public static String weatherInfo(int temp) {
        double c = convertToCelsius(temp);
        if (c < 0)
            return (c + " is freezing temperature");
        else
            return (c + " is above freezing temperature");
    }

    public static double convertToCelsius(int temperature) {
        double celsius = (double)(temperature - 32) * 5/9.0;
        return celsius;
    }
}

Other
这个解答有点。。。题目说了温度传入为整数的呀。

public class GrassHopper {

    public static String weatherInfo(double temp) {
        double c = convertToCelsius(temp);
        if (c <= 0)
            return (c + " is freezing temperature");
        else
            return (c + " is above freezing temperature");
    }

    public static double convertToCelsius(double temperature) {
        double celsius = (temperature - 32) * 5/9;
        return celsius;
    }
}

打破固有思维,有想法。

public class GrassHopper {

    public static String weatherInfo(int temp) {
        double c = (temp - 32) * 5.0 / 9;
        if (c > 0) {
            return String.format("%s is above freezing temperature", c);
        } else {
            return String.format("%s is freezing temperature", c);
        }
    }
}

后记

浮点数的精度真是的,原题故意(5/9.0)括号里这样算,这样精度和随机的测试用例结果就不匹配了,需要先*5再/9才一样。

上一篇下一篇

猜你喜欢

热点阅读