java - 当邮政编码以 0 开头或以 0 结尾时,程序无法运行

标签 java barcode zipcode

我的任务是为用户输入的邮政编码创建条形码。但是,如果用户输入以 0 开头(即 05123)或校验位为 0(即 10027)的邮政编码,我找不到一种方法来使其给出正确的结果。有人有建议吗?我正在参加 Java 初学者类(class)。

public class Zipcode{

private String zipcode = "";
private String barcode = "";
private String tempCode = "";
private int zipnum = 0;
private int zipnumForCD = 0;
private int checkDigit = 0;
private int reversedZip = 0;
private int digitSum = 0;


 public Zipcode(int zip_number){
    zipnum = zip_number;
    zipnumForCD = zip_number;
    getCheckDigit();
    createUpdatedZip();
    createBarcode();
}

public Integer getCheckDigit(){
    while (zipnumForCD > 0){
        digitSum = digitSum + zipnumForCD % 10;
        zipnumForCD = zipnumForCD/10;
    }
    if (digitSum % 10 == 0)
    {
        checkDigit = 0;
    }
    else
    {
        checkDigit = 10 - digitSum % 10;
    }
    return checkDigit;  
}

public void createUpdatedZip(){
    zipnum = Integer.valueOf(String.valueOf(zipnum) + String.valueOf(checkDigit));
    for (int i = zipnum; i !=0; i /= 10){
        reversedZip = reversedZip * 10 + i % 10;
    }
}

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

        }
    barcode = "|" + barcode + "|";
}

public String getBarcode(){
   return barcode;
}

}

这是我的测试人员类(class):

import java.util.Scanner;

public class ZipTest{

public static void main(String[] args){
    Scanner input = new Scanner(System.in);

    System.out.println("Please enter a ZIP code: ");
    int zip = input.nextInt();
    Zipcode code = new Zipcode(zip);

    System.out.println("The bar code: ");
    System.out.println(code.getBarcode());
}
}

最佳答案

创建一个 HashMap 实例,在其中存储相当于从“0”到“9”整数的每个字符的条形码。

Hashmat<Character, String> charBarMap = new HashMap<Character, String>();
intBarMap.put('0',"||:::"); 
intBarMap.put('1',":::||");
...
...

由于 int 中不能有前导 0,因此您需要将邮政编码采用字符串格式。

从该字符串中检索每个字符并使用 hashMap 表获取该字符的条形码字符串表示形式(“0”到“9”)并继续附加到字符串中。 p>

 String st = "020080";

 StringBuilder barCode = new StringBuilder();

 for(int i=0; i<st.length(); i++){
      char c = st.charAt(i);
      barCode.append(charBarMap.get(c));
 }

关于java - 当邮政编码以 0 开头或以 0 结尾时,程序无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40101517/

相关文章:

java - log4j.properties 到 log4j2 log2.xml

java - 将 java 类作为闭包绑定(bind)到 groovy 脚本中

java - zxing ean13 条码编码 'lead' , 'separator' 和 'trailer'

android - Zxing - 动态更改扫描的条形码类型

python - 将纬度/经度分配给邮政编码

excel - 邮政编码距离计算器

java - 使用 Bouncy CaSTLe 和 PDFBox 在 Java 中验证 PDF 签名

java - CardLayout 交换面板

c# - 一旦显示 BarcodePickerController,通过 MonoTouch 使用 RedLaser SDK 就会崩溃

php - PHP 中的邮政编码定位器