Java 开关盒出错…代码未返回任何内容

Java 开关盒出错…代码未返回任何内容,java,barcode,zipcode,Java,Barcode,Zipcode,我正在处理的项目的任务是让用户能够输入邮政编码,让程序在输出中提供条形码。例如,现在95014的条形码应该是·········································。这都是基于我的一个表,该表指示每个数字应该在case语句中显示什么。这是我为该部分编写的代码: public class Zipcode{ private String zipcode = ""; private String barcode = ""; private int zipnum = 0;

我正在处理的项目的任务是让用户能够输入邮政编码,让程序在输出中提供条形码。例如,现在95014的条形码应该是·········································。这都是基于我的一个表,该表指示每个数字应该在case语句中显示什么。这是我为该部分编写的代码:

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

但是,当我的tester类在用户输入邮政编码后调用该类时,结果不会出现任何结果。请帮忙!为什么什么都不退?我不知道我做错了什么。

首先创建一个Zipcode实例,Zipcode code=Zipcode9

然后为该实例调用createBarcode,因此在我的例子中是code.createBarcode

然后可以打印出getBarcode方法

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


示例:System.out.printlncode.getBarcode

请注意,您在每个开关盒块中重新分配了条形码变量,并在最后再次追加自身

可以使用方法中的临时变量执行此操作:

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: :|::|:::||||::::|:|:|:|:: */
}

您没有在每次迭代中正确地追加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: :|::|:::||||::::|:|:|:|::
    }
}
这样添加条形码

然后拆下这条线

        barcode += barcode;

这将解决您的问题。

您的条形码变量将在代码中覆盖,因此在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;
}

}

您从未调用过createBarcode似乎条形码被声明为,如果您从未调用过createBarcode,那么您将永远不会打印任何内容。另外,如果每次调用barcode=任何内容,您将永远不会在其中存储超过5个字符barcode@Rogue我有一个tester类调用getBarcode@jaynepants但这有什么好处呢,如果从未调用createBarcode?getBarcode只返回字段值,它不初始化任何内容,更简单的是,barCode+=||::;在切换情况下。另外:最好从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;
}