函数返回值始终为零(0.0)

问题描述 投票:1回答:3

我创建了可转换单位的移动应用,

主Java代码中的一个函数,它接收输入的数字和需要从中转换的单位以及需要转换成的单位,之后进行计算并返回值,但是,问题是函数总是返回值0.0

此功能的以下代码:

   public double areaConvert(double originalNumber, String originalUnit, String newUnit)
    { //Begin convertArea
        //Make two doubles, one that holds the original and one that will be redefined where needed

        //Make two strings, capturing the units fed to the method
        String originalU = originalUnit.toLowerCase();
        String newU = newUnit.toLowerCase();
        double num1 = originalNumber;
        double num2 = 0.0;


        switch(originalU) {
            //Begin unit conversions
            case "12":
                switch (newU) {
                    case "12":
                        num2 = originalNumber;
                        break;
                    case "14":
                        num2 = (num1 * 12) / 14;
                        break;
                    case "18":
                        num2 = (num1 * 12) / 18;
                        break;
                    case "21":
                        num2 = (num1 * 12) / 21;
                        break;
                    case "22":
                        num2 = (num1 *12) / 22;
                        break;
                    case "24":
                        num2 = (num1 *12) /24;
                        break;

                }
                break;
            case "14":
                switch (newU) {
                    case "12":
                        num2  = (num1 * 14) /12;
                        break;
                    case "14":
                        num2 = num1;
                        break;
                    case "18":
                        num2 = (num1 * 14) / 18;
                        break;
                    case "21":
                        num2 = (num1 * 14)  /21;
                        break;
                    case "22":
                        num2 = (num1 *14) / 22;
                        break;
                    case "24":
                        num2 = (num1 *14) / 24;
                        break;
                }
                break;
            case "18":
                switch (newU) {
                    case "12":
                        num2 = (num1 * 18) /12;
                        break;
                    case "14":
                        num2 = (num1 * 18) / 14;
                        break;
                    case "18":
                        num2 = num1 ;
                        break;
                    case "21":
                        num2 = (num1 * 18) / 21;
                        break;
                    case "22":
                        num2 = (num1  * 18) / 22;
                        break;
                    case "24":
                        num2 = (num1 * 18) / 24;
                        break;
                }
                break;
            case "21":
                switch (newU) {
                    case "12":
                        num2 = (num1 * 21) /12;
                        break;
                    case "14":
                        num2 = (num1 * 21) / 14;
                        break;
                    case "18":
                        num2 = (num1 * 21) / 18;
                        break;
                    case "21":
                        num2 = num1 ;
                        break;
                    case "22":
                        num2 = (num1 * 21) / 22;
                        break;
                    case "24":
                        num2 = (num1 * 21) / 24;
                        break;
                }
                break;
            case "22":
                switch (newU) {
                    case "12":
                        num2 = (num1 * 22) /12;
                        break;
                    case "14":
                        num2 = (num1 * 22) / 14;
                        break;
                    case "18":
                        num2 = (num1  * 22) / 18;
                        break;
                    case "21":
                        num2 = (num1 * 22) / 21;
                        break;
                    case "22":
                        num2 = num1 ;
                        break;
                    case "24":
                        num2 = (num1 * 22) / 24;
                        break;
                }
                break;
            case "24":
                switch (newU) {
                    case "12":
                        num2 = (num1 * 24) /12;
                        break;
                    case "14":
                        num2 = (num1 * 24) / 14;
                        break;
                    case "18":
                        num2 = (num1 * 24) / 18;
                        break;
                    case "21":
                        num2 = (num1 * 24) / 21;
                        break;
                    case "22":
                        num2 = (num1 * 24) / 22;
                        break;
                    case "24":
                        num2 = num1 ;
                        break;
                }
                break;

        } //End conversion table
        return num2;
        //Return the resulting number from the conversion table above

   } //End convertArea

} //End converter class
java android function
3个回答
1
投票
它可能返回零,因为您没有执行任何将其设置为非零的case子句。

我建议对'default:'案例进行编码,以检测不适当的输入。也许只是打印出“无法到达这里”以及您所打开的内容的值。


0
投票
在我看来,您需要的是

num2 = num1 * Double.parseDouble(originalU) / Double.parseDouble(newU);


0
投票
如果将3.00,“ 12”,“ 12”传递给该函数,它将返回3.00,恰好是您所期望的。它按照预期的方式工作。我不明白您的意思是返回0.0吗?主要问题是测试每个数字的功能有多大?设计真的很糟糕。您也不会处理传递给此方法的意外值,这将破坏代码并使应用程序崩溃。当您传递数字时,我看不到toLowerCase()的原因。
© www.soinside.com 2019 - 2024. All rights reserved.