我的任务是为用户输入的邮政编码创建条形码。但是,如果用户输入以 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/