美文网首页
每日一练73——Java Grasshopper调试摄氏转换器(

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

作者: 砾桫_Yvan | 来源:发表于2018-08-13 10:57 被阅读0次

    题目

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

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

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

    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才一样。

    相关文章

      网友评论

          本文标题:每日一练73——Java Grasshopper调试摄氏转换器(

          本文链接:https://www.haomeiwen.com/subject/akosbftx.html