我不知道我做了什么,但是当我运行主程序时,它不会通过 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/