【问题标题】:error with switch cases...code not returning anything开关盒错误...代码不返回任何内容
【发布时间】:2023-03-23 22:27:01
【问题描述】:

我正在处理的项目的任务是让用户能够输入邮政编码,并让程序在输出中提供条形码。例如,现在 95014 的条形码应该是“|:|:::|:|:||::::::||:|::|”。这一切都基于我拥有的表,该表表示每个数字应该是什么(在案例陈述中显示)。这是我为该部分编写的代码:

public class Zipcode{

private String zipcode = "";
private String barcode = "";
private int zipnum = 0;

public Zipcode(int zip_number){
    zipnum = zip_number;
}

public void createBarcode(){
    while (zipnum > 0){
        switch (zipnum % 10)
        {
            case 0: 
                barcode = "||:::";
                break;
            case 1: 
                barcode = ":::||";
                break;
            case 2: 
                barcode = "::|:|";
                break;
            case 3: 
                barcode = "::||:";
                break;
            case 4: 
                barcode = ":|::|";
                break;
            case 5: 
                barcode = ":|:|:";
                break;
            case 6: 
                barcode = ":||::";
                break;
            case 7: 
                barcode = "|:::|";
                break;
            case 8: 
                barcode = "|::|:";
                break;
            case 9: 
                barcode = "|:|::";
                break;
            default:
                break;
        }
        barcode += barcode;
        zipnum = zipnum / 10;
    }
}

public String getBarcode(){
    return barcode;
    }
}

但是,当我的测试程序类在用户输入邮政编码后调用该类时,没有任何结果。请帮忙!为什么什么都没有退回?我不知道我做错了什么。

【问题讨论】:

  • 你永远不会打电话给#createBarcode
  • 看来barcode 被声明为"",如果您从不调用createBarcode(),那么您将永远不会打印任何内容
  • 另外,如果你每次调用barcode = whateverbarcode 中存储的字符数永远不会超过 5 个
  • @Rogue 我有一个调用 getBarcode() 的测试器类
  • @jaynepants 但是如果 #createBarcode 永远不会被调用,那会有什么好处呢? #getBarcode 只是返回字段值,不初始化任何东西

标签: java barcode zipcode


【解决方案1】:

请注意,您在每个 switch-case 块中重新分配了条形码变量,并在最后再次附加自身。

您可以在方法中使用临时变量来做到这一点:

public void createBarcode(){
    String tempBarcode = "";
    ...
        case 0:
            tempBarcode = "||:::";
            break;
    ....
    barcode += tempBarcode;

但我认为最干净的解决方案是将其用作没有任何类变量依赖项的实用方法:

public static String calculateBarcode(int zipNumber) {
    StringBuilder barcode = new StringBuilder();
    while (zipNumber > 0) {
        switch (zipNumber % 10) {
            case 0:
                barcode.append("||:::");
                break;
            case 1:
                barcode.append(":::||");
                break;
            ...
            ...
            default:
                break;
        }
        zipNumber = zipNumber / 10;
    }
    return barcode.toString();
}

简单的测试用例:

public static void main(String[] args) {
    System.out.println(ZipcodeUtil.calculateBarcode(95014));
    /* Output: :|::|:::||||::::|:|:|:|:: */
}

【讨论】:

  • 或者,更简单的是,barCode += "||:::"; 在开关盒中。
  • 另外:最好从createBarcode 返回String。使用成员变量会使事情变得更加混乱。
  • 同意。我试图指出您不想用新的部分值重新分配条形码变量。
【解决方案2】:

您没有在每次迭代中正确附加 zip 值。当您在此步骤中覆盖此处的值时,该值正在丢失

   ...
        case 0: 
                barcode = "||:::";
                break;
   ...

改为使用临时变量来存储当前迭代的邮政编码值

public class Zipcode {

    private String zipcode = "";
    private String barcode = "";
    private int zipnum = 0;

    public Zipcode(int zip_number) {
        zipnum = zip_number;
    }

    public void createBarcode() {
        String temp_barcode = "";
        while (zipnum > 0) {
            System.out.println(zipnum % 10);
            switch (zipnum % 10) {
            case 0:
                temp_barcode = "||:::";
                System.out.println(0);
                break;
            case 1:
                temp_barcode = ":::||";
                System.out.println(1);
                break;
            case 2:
                temp_barcode = "::|:|";
                System.out.println(2);
                break;
            case 3:
                temp_barcode = "::||:";
                System.out.println(3);
                break;
            case 4:
                temp_barcode = ":|::|";
                System.out.println(4);
                break;
            case 5:
                temp_barcode = ":|:|:";
                System.out.println(5);
                break;
            case 6:
                temp_barcode = ":||::";
                System.out.println(6);
                break;
            case 7:
                temp_barcode = "|:::|";
                System.out.println(7);
                break;
            case 8:
                temp_barcode = "|::|:";
                System.out.println(8);
                break;
            case 9:
                temp_barcode = "|:|::";
                System.out.println(9);
                break;
            default:
                break;
            }
            barcode += temp_barcode;
            System.out.println(barcode);
            zipnum = zipnum / 10;
        }
    }

    public String getBarcode() {
        return barcode;
    }

    public static void main(String args[]) {
        Zipcode z = new Zipcode(95014);
        z.createBarcode();
        System.out.println(z.getBarcode()); // output: :|::|:::||||::::|:|:|:|::
    }
}

【讨论】:

    【解决方案3】:

    这样添加barcode

            case 0: 
                barcode += "||:::";
                break;
            case 1: 
                barcode += ":::||";
                break;
            case 2: 
                barcode += "::|:|";
                break;
            case 3: 
                .....
                .....
                .....
    

    并删除此行

            barcode += barcode;
    

    这将解决您的问题。

    【讨论】:

      【解决方案4】:

      您的条形码变量会覆盖您的代码,因此请在 createBarcode 方法中添加局部变量。试试这个:

      public class Zipcode{
      
      private String zipcode = "";
      private String barcode = "";
      private int zipnum = 0;
      
      public static void main(String[] a){
          Zipcode z = new Zipcode(1568);
          System.out.println(z.zipnum);
          z.createBarcode();
          System.out.println(z.zipnum);
          System.out.println(z.getBarcode());
      }
      
      public Zipcode(int zip_number){
          zipnum = zip_number;
      }
      
      public void createBarcode(){
          while (zipnum > 0){
              String barcode;
              switch (zipnum % 10)
              {
                  case 0:
                      barcode = "||:::";
                      break;
                  case 1:
                      barcode = ":::||";
                      break;
                  case 2:
                      barcode = "::|:|";
                      break;
                  case 3:
                      barcode = "::||:";
                      break;
                  case 4:
                      barcode = ":|::|";
                      break;
                  case 5:
                      barcode = ":|:|:";
                      break;
                  case 6:
                      barcode = ":||::";
                      break;
                  case 7:
                      barcode = "|:::|";
                      break;
                  case 8:
                      barcode = "|::|:";
                      break;
                  case 9:
                      barcode = "|:|::";
                      break;
                  default:
                      barcode = "";
                      break;
              }
              this.barcode += barcode;
              zipnum = zipnum / 10;
          }
      }
      
      public String getBarcode(){
          return barcode;
      }
      

      }

      【讨论】:

        【解决方案5】:

        首先创建一个Zipcode实例,Zipcode code = Zipcode(9)

        然后为该实例调用 createBarcode(),因此在我的情况下为 code.createBarcode()

        然后你可以打印出 getBarcode() 方法。

        请记住,getBarcode() 仅返回带有条形码的字符串,但不会将其打印出来。您必须使用 print 将其打印出来。

        示例:System.out.println(code.getBarcode())

        【讨论】:

          猜你喜欢
          • 2016-11-26
          • 1970-01-01
          • 1970-01-01
          • 2019-06-08
          • 1970-01-01
          • 2022-01-12
          • 1970-01-01
          • 2023-03-04
          • 2020-04-19
          相关资源
          最近更新 更多