【问题标题】:Difficulty setting variable难度设定变量
【发布时间】:2014-01-17 21:54:47
【问题描述】:

我应该为我的编程课程编写一个代码,就像您在网上订购一样。我已经到了让程序输入项目编号并返回价格(不含运费)的部分,但是每次运行它时,它似乎都自动将我用来表示价格的变量设置为13. 应设置为零。 这是我的代码中给我带来问题的部分:

class Order {
    public Order() {}

    public double price(String odd, double quant, int g) {
        double set;
        if (g == 1) {
            if (odd.equals("AT413")) {
                set = (50.03 * quant) + set;
            } else if (odd.equals("AT414")) {
                set = (60.04 * quant) + set;
            } else if (odd.equals("AT415")) {
                set = (147.01 * quant) + set;
            } else if (odd.equals("AT416")) {
                set = (38.00 * quant) + set;
            } else if (odd.equals("AT417")); {
                set = (13.00 * quant) + set;
            }
        } else if (g == 2) {
            if (odd.equals("AT513")) {
                set = (50.03 * quant) + set;
            } else if (odd.equals("AT514")) {
                set = (50.00 * quant) + set;
            } else if (odd.equals("AT515")) {
                set = (130.02 * quant) + set;
            } else if (odd.equals("AT516")) {
                set = (25.03 * quant) + set;
            } else if (odd.equals("AT517")); {
                set = (13.00 * quant) + set;
            }
        } else if (g == 3) {
            if (odd.equals("AT613")) {
                set = (50.03 * quant) + set;
            } else if (odd.equals("AT614")) {
                set = (86.00 * quant) + set;
            } else if (odd.equals("AT615")) {
                set = (130.00 * quant) + set;
            } else if (odd.equals("AT616")) {
                set = (40.04 * quant) + set;
            } else if (odd.equals("AT617")); {
                set = (13.00 * quant) + set;
            }
        }
        return set;
    }
}

我尝试了一些不同的方法。我让它从主代码中获取变量集,但这不起作用,因为即使我将 0 发送到班级,它仍然设置...设置(对不起那个变量名)在 13。我试着摆脱+set 在最后,但这不起作用,因为它只是打印出 13 作为订单成本,即使我输入了应该调用 50.03 价格的字符串。我更改了匹配价格以查看会发生什么,我意识到它正在使用 AT617 从代码的最后一行中提取设置变量的数字,但我不知道它为什么这样做或如何修复它。非常感谢您的帮助。

【问题讨论】:

  • 如果您能格式化所有这些 if 语句将会非常有帮助...拜托。
  • 就是else if(odd.equals("AT417")); 行上的那个分号
  • 那个 if 语句是可憎的 :( 请更好地格式化它。还可以考虑使用枚举或其他东西来旧你的文字。
  • 不知道你是怎么抓到那个格斯的,但是很好!
  • 请注意,您仍然可能最终没有初始化set,因为这些内部块仍然没有最终的无条件else。例如,当 g3,但 odd 不等于 AT613、AT614、AT615、AT616 或 AT617 时会发生什么?

标签: java class variables methods


【解决方案1】:

如果你已经格式化了你的代码,你就可以看到

public double price(String odd, double quant, int g) {
    double set = 0;
    if (g == 1) {
        if (odd.equals("AT413"))
            set = 50.03 * quant + set;
        else if (odd.equals("AT414"))
            set = 60.04 * quant + set;
        else if (odd.equals("AT415"))
            set = 147.01 * quant + set;
        else if (odd.equals("AT416"))
            set = 38.00 * quant + set;
        else if (odd.equals("AT417"))
            ;
        {
            set = 13.00 * quant + set;
        }
    } else if (g == 2) {
        if (odd.equals("AT513"))
            set = 50.03 * quant + set;
        else if (odd.equals("AT514"))
            set = 50.00 * quant + set;
        else if (odd.equals("AT515"))
            set = 130.02 * quant + set;
        else if (odd.equals("AT516"))
            set = 25.03 * quant + set;
        else if (odd.equals("AT517"))
            ;
        {
            set = 13.00 * quant + set;
        }
    } else if (g == 3) {
        if (odd.equals("AT613"))
            set = 50.03 * quant + set;
        else if (odd.equals("AT614"))
            set = 86.00 * quant + set;
        else if (odd.equals("AT615"))
            set = 130.00 * quant + set;
        else if (odd.equals("AT616"))
            set = 40.04 * quant + set;
        else if (odd.equals("AT617"))
            ;
        {
            set = 13.00 * quant + set;
        }
    }
    return set;
}

有一些看起来很奇怪的碎片,比如

        else if (odd.equals("AT417"))
            ;
        {
            set = 13.00 * quant + set;
        }

删除该分号或if (odd.equals("AT417")) case 执行一个空语句,并且在任何情况下不必要的 {} 括起来set = 13.00 * quant + set; 这将搞乱你的所有结果。

【讨论】:

    【解决方案2】:

    我真的建议格式化代码。

    else if(odd.equals("AT517"));
    

    有一个 ;

    也是这样

    else if(odd.equals("AT617"));
    

    【讨论】:

    • 抱歉没有格式化的代码,我以为我有,但显然没有。它已在我的计算机上正确格式化,不敢相信我错过了...感谢您的帮助!
    • 一个提示是使用允许多标签的文本编辑器(选择所有代码并在粘贴之前添加一个额外的标签,因为这里需要 4 个空格或一个标签才能正确缩进.
    • @user2808951 或使用 eclipse,它有专门针对 ; 的警告如果之后
    猜你喜欢
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多