0

我在验证这部分代码时遇到问题,错误消息显示不正确,如果我只按回车键程序将退出,感谢任何帮助。

    strInput1="";
    strInput1 = JOptionPane.showInputDialog(null,
            "2013 SHIPPING OPTIONS\n\n(O)vernight shipping-$10.00"+
            "\n(T)wo-Day shipping-$7.50\n(P)riority shipping-$5.00"+
            "\n(N)o cost shipping"+
            "\n\nPlease select a shipping option(O,P,T or N) ",
            "Wiliam's Party Store",3);
            if(!strInput1.equals(""))
                JOptionPane.showMessageDialog(null, 
                "You MUST enter O,o,T,t,P,p,N,n",
                "ERROR!!!",0);
            cShipping=(strInput1.toUpperCase().charAt(0));


        while((!strInput1.equals(""))&& !(cShipping=='P')|(cShipping=='T')||(cShipping=='O'))
     {
            JOptionPane.showMessageDialog(null, 
            "You MUST enter O,o,T,t,P,p,N,n",
            "ERROR!!!",0);
            strInput1 = JOptionPane.showInputDialog(null,
            "2013 SHIPPING OPTIONS\n\n(O)vernight shipping-$10.00"+
            "\n(T)wo-Day shipping-$7.50\n(P)riority shipping-$5.00"+
            "\n(N)o cost shipping"+
            "\n\nPlease select a shipping option(O,P,T or N) ",
            "Wiliam's Party Store",3);
            if (!strInput1.equals(""))
            cShipping=(strInput1.toUpperCase().charAt(0));
                    strInput1 = "N";
    }
    PO1.setShipping(cShipping);
4

3 回答 3

1

对于多个否定表达式,请使用逻辑&&运算符:

while (!strInput1.equals("") && cShipping != 'P' && 
                                       cShipping != 'T' && cShipping != 'O')

运算符将||表达式短路,因此while即使strInput1为空,循环也可以保持活动状态。也cShipping永远不会在第二个while循环中分配,这将阻止循环退出。

旁白:一个do-while循环可以允许两个循环合并为一个。

于 2013-04-17T02:27:30.363 回答
0

所以你的麻烦是验证你的代码,而不是代码本身?我知道我们的第一直觉太急于纠正您的代码,但是我想提供一个我认为更有益的替代解决方案。

我认为解决您的麻烦的方法是重构您的代码,首先学习良好的编码实践和风格。这将有助于您将来进行任何开发工作。

一个很好的起点是这里(维基百科),他们讨论编码约定和重构。

在您粘贴的代码中,我看到拼写错误、“在此处输入代码”一行以及您的逻辑缺陷。除此之外,还不清楚您的最后一个“if”语句在哪里包括第二行:虽然缩进表明它可能,但缺少大括号可以确保其他情况。

if (!strInput1.equals(""))
        cShipping=(strInput1.toUpperCase().charAt(0));
                strInput1 = "N";

应该是以下..(如果这确实是您的意图)

if (!strInput1.equals(""))
        cShipping=(strInput1.toUpperCase().charAt(0));
strInput1 = "N";

附带说明一下,通过使用模块化、耦合甚至更多的错误检查/捕获来改进您的代码是值得的。

于 2013-04-17T02:51:27.283 回答
0

|的代码中有一个是按位或而不是逻辑或||

于 2013-04-17T02:40:42.597 回答