繁体   English   中英

我的switch语句未运行(昨天运行,但是IDK发生了什么)JAVA

[英]My switch statement is not running (It was working yesterday but IDK what happened) JAVA

我不知道我做了什么,但是当我运行主程序时,它不会通过switch语句。 昨晚它在工作,无论如何我都没有改变它,我只是添加了一条用于调试目的的打印语句。 这是我必须为班级分配做的POS系统的一部分。

package MultiBuy;

import static POS.POS_System.NonGSTVodka;
import static POS.POS_System.PRICE_FORMAT;
import static POS.POS_System.Vodka;
import static POS.POS_System.btnCancelPrevious;
import static POS.POS_System.nPreviousPrice;
import static POS.POS_System.nTotal;
import static POS.POS_System.strPreviousDrink;
import static POS.POS_System.txtBill;
import static POS.POS_System.spaces;

public class MultiBuy {

    public static int clicked;
    public static double DiscountAmt = 0.05;
    public static double Discount_PRICE_Vodka = 0.385;
    public static double NewVodkaPrice;

    public static void MultiBuy(){
                         POS.POS_System.btnVodkaPressed = true;
                         System.out.println("No Cases Ran");
                 switch(clicked){
                 case 1:
                     if(clicked == 0){
                     //Plus 1 to clicked to create event
                         clicked++;
                                 System.out.println("Case 1 Completed");
                                 break;
                    }

                case 2 :
                     if(clicked >= 2 && POS.POS_System.btnVodkaPressed == true){
                                     txtBill.setText(txtBill.getText() + "\n" +
                    "     " + strPreviousDrink + 
                    spaces(40 - strPreviousDrink.length()) + "-" +
                    PRICE_FORMAT.format(nPreviousPrice) + "\n" +  "     (Canceled)\n");
                nTotal -= nPreviousPrice + NewVodkaPrice;
                btnCancelPrevious.setEnabled(false);
                     NewVodkaPrice = Vodka - Discount_PRICE_Vodka;
                     POS.POS_System.txtBill.setText(POS.POS_System.txtBill.getText() + "\n" + "Multibuy Special = " + MultiBuy.Discount_PRICE_Vodka);
                                 POS.POS_System.txtBill.setText(POS.POS_System.txtBill.getText() + "New Price = " + NewVodkaPrice);
                                 POS.POS_System.nTotal = POS.POS_System.nTotal;
                     clicked--;
                                 System.out.println("Case 2 Completed");//Should equal 3
                                 break;
                                 }
                        case 3 :
                                 if(clicked <= 1){
                                 clicked++;
                                 System.out.println("Case 3 Completed");//Should equal 2
                                 break;
                                 }
                 }
            }
        }

首先有几个问题。 值得注意的是,您从未初始化过clicked的属性(或私有实例变量),也许您在其他地方进行过? 可能需要在构造函数中完成(构造函数的工作是初始化私有实例变量)。 据我所知,整数(原始类型)将为0。无论如何,我也不相信您在正确使用switch语句。 Switch只是if语句的语法糖果。

例如,以下代码块相同

如果声明:

public int foo = 0;
if(foo == 1) {
    // do things
} else if (foo == 2) {
   // do things
} else {
   // do things
}

开关:

public int foo = 0;
switch(foo) {
    case 1: 
         // do things
         break;
    case 2: 
         // do things
         break;
    default:
         // do things
         break;
}

如果您想了解一下, break关键字在Java中至关重要的原因在这里得到了很好的解释。

请注意,在Java中,您只能打开一个int变量。 其他语言允许您打开所有原始类型,甚至自定义对象! 继续...

由于这些原因,您编写的switch语句将永远不会被处理,因为那些与块无关的语句将永远不会以您设置它的方式执行 据我所知,这是关于您认为您想发生的事情的经过编辑的代码块(尽管我无法真正说出您想做什么)。 鉴于以上所述,我相信您可以更轻松地解决它。

// your imports

public class MultiBuy {

    public static int clicked;
    public static double DiscountAmt = 0.05;
    public static double Discount_PRICE_Vodka = 0.385;
    public static double NewVodkaPrice;

    public static void MultiBuy(){
        POS.POS_System.btnVodkaPressed = true;
        System.out.println("No Cases Ran");

        // initialize clicked!!!! 

        clicked = 3;

        switch(clicked){
            case 0:
            clicked++;
            System.out.println("Case 1 Completed");
            break;

            default: 
             txtBill.setText(txtBill.getText() + "\n" +
                    "     " + strPreviousDrink + 
                    spaces(40 - strPreviousDrink.length()) + "-" +
                    PRICE_FORMAT.format(nPreviousPrice) + "\n" +  "     (Canceled)\n");
                nTotal -= nPreviousPrice + NewVodkaPrice;
                btnCancelPrevious.setEnabled(false);
                NewVodkaPrice = Vodka - Discount_PRICE_Vodka;
                POS.POS_System.txtBill.setText(POS.POS_System.txtBill.getText() + "\n" + "Multibuy Special = " + MultiBuy.Discount_PRICE_Vodka);
                POS.POS_System.txtBill.setText(POS.POS_System.txtBill.getText() + "New Price = " + NewVodkaPrice);
                POS.POS_System.nTotal = POS.POS_System.nTotal;
                clicked--;
                System.out.println("Case 2 Completed");//Should equal 3
            break;
        }
    }
}

希望有帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM