我的switch语句没有运行(它昨天还在运行,但IDK发生了什么事)JAVA

我的switch语句没有运行(它昨天还在运行,但IDK发生了什么事)JAVA,java,switch-statement,Java,Switch Statement,我不知道我做了什么,但是当我运行主程序时,它没有通过switch语句。它昨晚工作正常,我没有改变它,我只是为了调试目的添加了一个print语句。这是POS系统的一部分,我必须做一个课堂作业 package MultiBuy; import static POS.POS_System.NonGSTVodka; import static POS.POS_System.PRICE_FORMAT; import static POS.POS_System.Vodka; import static P

我不知道我做了什么,但是当我运行主程序时,它没有通过switch语句。它昨晚工作正常,我没有改变它,我只是为了调试目的添加了一个print语句。这是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;
                                 }
                 }
            }
        }
packagemultibuy;
导入静态POS.POS_System.NonGSTVodka;
导入静态POS.POS\u System.PRICE\u格式;
导入静态POS.POS_System.Vodka;
导入静态POS.POS\u System.btnCancelPrevious;
导入静态POS.POS\u System.n前置价格;
导入静态POS.POS_System.nTotal;
导入静态POS.POS\u System.strprevious饮料;
导入静态POS.POS\u System.txtBill;
导入静态POS.POS\u系统空间;
公共类多购{
公共静态int;
公共静态双折扣mt=0.05;
公共静态双折扣价格伏特加=0.385;
公共静态双重价格;
公共静态void MultiBuy(){
POS.POS_System.btnVodkaPressed=true;
System.out.println(“未运行任何案例”);
开关(单击){
案例1:
如果(单击==0){
//加1以单击以创建事件
单击++;
System.out.println(“案例1已完成”);
打破
}
案例2:
如果(单击>=2&&POS.POS\u System.btnModkaPressed==true){
txtBill.setText(txtBill.getText()+“\n”+
“+strpreous饮料”
空格(40-strPreviousDrink.length())+“-”+
PRICE_FORMAT.FORMAT(nProvousPrice)+“\n”+”(已取消)\n”);
nTotal-=前价格+新价格;
btnCancelPrevious.setEnabled(假);
NewVodkaPrice=伏特加-折扣价格伏特加;
POS.POS\u System.txtBill.setText(POS.POS\u System.txtBill.getText()+“\n”+“Multibuy Special=“+Multibuy.折扣\u价格\u伏特加”);
POS.POS_System.txtBill.setText(POS.POS_System.txtBill.getText()+“新价格=”+新价格);
POS.POS_System.nTotal=POS.POS_System.nTotal;
点击--;
System.out.println(“案例2已完成”);//应等于3
打破
}
案例3:

如果(clicked首先有几个问题。值得注意的是,您从未初始化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语句将永远不会被处理,因为那些if块是不相关的,并且永远不会按照您设置的方式执行.不过,根据我上面的解释,我相信你能更轻松地解决这个问题

// 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;
        }
    }
}

希望对您有所帮助:)

如果
clicked==0,您如何让
开关(单击){case 1:…
然后使用文本(如果
clicked==0
)。单击是否必须是1才能出现在该case语句中?您创建了一个公共静态int“clicked”,但从未实例化它。除非另一个方法设置了“clicked”的值,您的switch语句将不知道该做什么,因为它当前为NULL,并且switch语句没有默认大小写。此外,Kevin是对的,您的大小写编号将是“clicked”的值@almostcolin,我们确实不知道单击的
的值,因为它是静态的,我们假设它是在其他地方设置的。但是,次要的一点,因为它是
int
,所以它将是
0
的整数值,而不是
null
@Kevin0。我想出来了,我必须注释掉启动开关的行(LOL)我今天早上错过了,谢谢你的帮助guys@Don我还补充了一些关于switch语句的澄清,如果你觉得有帮助的话。没问题。如果它解决了你的问题,你能接受答案吗?@不要