java - 我的 switch 语句没有运行(昨天还可以运行,但我不知道发生了什么)JAVA

标签 java switch-statement

我不知道我做了什么,但是当我运行主程序时,它不会通过 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 的属性(或私有(private)实例变量),也许您在其他地方进行了初始化?这可能需要在构造函数中完成(构造函数的工作是初始化私有(private)实例变量)。据我所知,整数(基本类型)将为 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 中至关重要的原因已经得到很好的解释 here 如果您想了解的话。

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

由于这些原因,您编写的 switch 语句永远不会被处理,因为这些 if block 是不相关的,并且永远不会按照您设置的方式执行。据我所知,这是您编辑的代码块,关于我认为您想要发生的事情(尽管我无法真正说出您想要做什么)。不过,根据我上面的解释,我相信您可以更轻松地解决这个问题。

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

希望有帮助:)

关于java - 我的 switch 语句没有运行(昨天还可以运行,但我不知道发生了什么)JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36831060/

相关文章:

java - 如何获取由lucene 4.4.0创建的索引目录中的所有术语

java - 如何为在 Tomcat 上运行的应用程序使用 System.getProperty()

java - 示例 Java 应用程序

c++ - switch case 中 map 迭代器的交叉初始化

ios - Swift 2.2 中的自定义模式匹配未按预期工作

java - hazelcast 中的自动聚类

java - solr 动态字段与 spring 数据

Java语法: switch case as variable?

java - 在 Java 中使用 Switch 语句时遇到问题

android - 获取对象标签的字符串