【问题标题】:Use switch case with array使用带有数组的开关盒
【发布时间】:2018-04-26 01:16:45
【问题描述】:

是否可以在这段代码的 switch 语句中使用数组? 因为我尝试了几次但我做不到,还有另一种方法来声明 BloodType 然后在没有这个数组的情况下为其分配多个 String 值?例如(枚举或数组列表?)我可以在这种情况下使用它们吗?

private String []BloodType  = new String[8];
public String[] getBloodType() {
        return BloodType;
    }

    public void setBloodType(String[] BloodType) {
        this.BloodType = BloodType;
    }
        private void BloodType()
        {
            BloodType[0]="A+";
            BloodType[1]="A-";
            BloodType[2]="B+";
            BloodType[3]="B-";
            BloodType[4]="O+";
            BloodType[5]="O-";
            BloodType[6]="AB+";
            BloodType[7]="AB-";
        }
public void BloodInfomation () // use BloodType here as Array
    {

            switch (BloodType) {
                case "A+":
                    BloodCode=1;
                    System.out.println("Blood Type A+ & Blood Code is : " + BloodCode + "No of Bags avaliable"
                            + s.checkStockType.equals("A+"));
                    break;
                case "A-":
                    BloodCode=2;
                    System.out.println("Blood Type A- & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                            + s.checkStockType.equals("A-"));
                    break;
                case "B+":
                    BloodCode=3;
                    System.out.println("Blood Type B+ & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                            + s.checkStockType.equals("B+"));
                    break;
                case "B-":
                    BloodCode=4;
                    System.out.println("Blood Type B- & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                            + s.checkStockType.equals("B-"));
                    break;
                case "O+":
                    BloodCode=5;
                    System.out.println("Blood Type O+ & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                            + s.checkStockType.equals("O+"));
                    break;
                case "O-":
                    BloodCode=6;
                    System.out.println("Blood Type O- & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                            + s.checkStockType.equals("O-"));
                    break;
                case "AB+":
                    BloodCode=7;
                    System.out.println("Blood Type AB+ & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                            + s.checkStockType.equals("AB+"));
                    break;
                case "AB-":
                    BloodCode=8;
                    System.out.println("Blood Type AB- & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                            + s.checkStockType.equals("AB-"));
                    break;
                default:
                    System.out.println("There is no code for the type you write !!");
                    break;
            }
        }

【问题讨论】:

  • 你坚持什么?你有错误吗?
  • @GBlodgett 如上所述,我不能在 switch 语句中使用 BloodType 数组作为案例。

标签: java arrays switch-statement


【解决方案1】:

你是对的。还有另一种方法来实现你的 BloodType 东西。您提到了枚举,它对于像血型这样的对象(具有有限数量的实例变体)是一个更好的实现。

enum BloodType {
    A_MINUS("A+", 1), 
    B_PLUS("B+", 2), 
    B_MINUS("B-", 3), 
    O_PLUS("AO", 4), 
    O_MINUS("O-", 5), 
    AB_PLUS("AB+", 6), 
    AB_MINUS("AB-", 7);

    BloodType(String value, int code) {
        this.value = value;
        this.code = code;
    }

    String value;
    int code;

}

void getBloodInformation(BloodType type) {
    switch (type) {
    case A_MINUS:
        // do something ...
        break;
    case O_MINUS:
        // do other things
        break;
    default:
        // default behavior if you didn't define all cases above
    }
}

最好使用带开关的枚举。这样您就不会错过任何一个案例,并且可以避免由于错误的字符串拼写而导致的潜在错误。

【讨论】:

  • @mada 使用枚举的替代解决方案在您的情况下似乎更好;)
  • 您也可以直接在枚举中添加 BloodCode,而不是使用开关从 BloodType 中查找。
  • 谢谢,我也觉得用 enum 比较好,但是在 enum 中可以赋值像 A_MUNUS("A+") 吗?然后在交换机中使用它?
  • @Mada 是的,您可以向枚举添加属性。枚举就像类(它们实际上是)。与类的主要区别是您不能实例化枚举(调用构造函数)。否则,您可以根据需要定义方法和属性。我以这种方式编辑了我的答案。
【解决方案2】:

该数组可以很好地存储血型,但您的比较将不起作用。在您的开关中,您将字符串与字符串 [] 的情况进行比较。我认为您想要的是两个单独的变量,一个是血型数组,另一个是您所指对象的特定血型。

public class person{
//Defining the array of possible blood types which
private String[] BloodTypeArray = new String[8];
private void BuildBloodTypeArray(){
    BloodTypeArray[0]="A+";
    BloodTypeArray[1]="A-";
    BloodTypeArray[2]="B+";
    BloodTypeArray[3]="B-";
    BloodTypeArray[4]="O+";
    BloodTypeArray[5]="O-";
    BloodTypeArray[6]="AB+";
    BloodTypeArray[7]="AB-";
}
//Defining the specific blood type of this instance
private String BloodType;
public String getBloodType(){
    return BloodType;
}
public void setBloodType(String BloodType){
    this.BloodType = BloodType;
}
//The switch needs something to compare the case to so it takes an input string
public void BloodInformation(){
    int BloodCode;
    switch(this.BloodType){
        case "A+":
        BloodCode=1;
        System.out.println("Blood Type A+ & Blood Code is : " + BloodCode + " No of Bags avaliable" );
        break;
    case "A-":
        BloodCode=2;
        System.out.println("Blood Type A- & Blood Code is : " + BloodCode + " No of Bags avaliable" );
        break;
    case "B+":
        BloodCode=3;
        System.out.println("Blood Type B+ & Blood Code is : " + BloodCode + " No of Bags avaliable");
        break;
    case "B-":
        BloodCode=4;
        System.out.println("Blood Type B- & Blood Code is : " + BloodCode + " No of Bags avaliable");
        break;
    case "O+":
        BloodCode=5;
        System.out.println("Blood Type O+ & Blood Code is : " + BloodCode + " No of Bags avaliable");
        break;
    case "O-":
        BloodCode=6;
        System.out.println("Blood Type O- & Blood Code is : " + BloodCode + " No of Bags avaliable");
        break;
    case "AB+":
        BloodCode=7;
        System.out.println("Blood Type AB+ & Blood Code is : " + BloodCode + " No of Bags avaliable");
        break;
    case "AB-":
        BloodCode=8;
        System.out.println("Blood Type AB- & Blood Code is : " + BloodCode + " No of Bags avaliable");
        break;
    default:
        System.out.println("There is no code for the type you write !!");
        break;
    }
}
public static void main(String[] args){
    person p = new person();
    p.BuildBloodTypeArray();
    p.setBloodType("AB-");
    System.out.println(p.getBloodType());
    p.BloodInformation();

}

这是一个使用您发布的代码和一个名为 person 的类的示例。 另请注意,由于所有重复代码,在这种情况下可以使用循环而不是开关。你可以用这个替换你的开关。

public void BloodInformation(){
    int BloodCode;
    for(int i=0; i<BloodTypeArray.length; i++){
        BloodCode = i+1;
        if(this.BloodType == BloodTypeArray[i]){
            System.out.println("Blood Type "+ BloodTypeArray[i] + " & Blood Code is : " + BloodCode + " No of Bags avaliable" );
            return;
        }
    }
    System.out.println("There is no code for the type you write !!");
}

【讨论】:

    【解决方案3】:

    打开阵列不起作用。相反,查看数组中的项目并打开每个项目。为此,您需要将开关包装在一个循环中,以在 BloodInformation 方法中迭代血型。

    public void BloodInfomation () // use BloodType here as Array
    {
              for(String type : BloodType) {
                switch (type) {
                    case "A+":
                        BloodCode=1;
                        System.out.println("Blood Type A+ & Blood Code is : " + BloodCode + "No of Bags avaliable"
                                + s.checkStockType.equals("A+"));
                        break;
                    case "A-":
                        BloodCode=2;
                        System.out.println("Blood Type A- & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                                + s.checkStockType.equals("A-"));
                        break;
                    case "B+":
                        BloodCode=3;
                        System.out.println("Blood Type B+ & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                                + s.checkStockType.equals("B+"));
                        break;
                    case "B-":
                        BloodCode=4;
                        System.out.println("Blood Type B- & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                                + s.checkStockType.equals("B-"));
                        break;
                    case "O+":
                        BloodCode=5;
                        System.out.println("Blood Type O+ & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                                + s.checkStockType.equals("O+"));
                        break;
                    case "O-":
                        BloodCode=6;
                        System.out.println("Blood Type O- & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                                + s.checkStockType.equals("O-"));
                        break;
                    case "AB+":
                        BloodCode=7;
                        System.out.println("Blood Type AB+ & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                                + s.checkStockType.equals("AB+"));
                        break;
                    case "AB-":
                        BloodCode=8;
                        System.out.println("Blood Type AB- & Blood Code is : " + BloodCode + "No of Bags avaliable" 
                                + s.checkStockType.equals("AB-"));
                        break;
                    default:
                        System.out.println("There is no code for the type you write !!");
                        break;
                }
            }
         }
    

    【讨论】:

      猜你喜欢
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 2018-05-05
      • 2013-05-15
      • 1970-01-01
      相关资源
      最近更新 更多