簡體   English   中英

開關盒錯誤...代碼未返回任何內容

[英]error with switch cases…code not returning anything

我正在從事的項目的分配是使用戶能夠輸入郵政編碼,而程序則需要在輸出中提供條形碼。 例如,現在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;
    }
}

但是,當我的測試人員類在用戶輸入郵政編碼后調用該類時,結果什么也沒有出現。 請幫忙! 為什么不退還任何東西? 我不知道我在做什么錯。

請注意,您在每個開關盒塊中重新分配了條形碼變量,並在末尾再次附加了它。

您可以在方法內部使用一個臨時變量來完成此操作:

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

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

並刪除此行

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

}

首先創建一個Zipcode實例,Zipcode代碼= Zipcode(9)

然后為該實例調用createBarcode(),因此在我的情況下為code.createBarcode()

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

記住,getBarcode()僅返回帶有條形碼的字符串,但不會將其打印出來。 您必須使用打印將其打印出來。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM