【发布时间】:2016-10-18 06:56:20
【问题描述】:
我的任务是为用户输入邮政编码创建一个条形码。但是,如果用户输入以 0 开头(即 05123)或校验位为 0(即 10027)的邮政编码,我无法找到正确的结果。有人有建议吗?我在一个初学者的java类。
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;
}
}
这是我的测试类:
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());
}
}
【问题讨论】:
-
好吧,
int没有前导零,因此您可能需要重新考虑邮政编码可以用int表示。我会切换到String。 -
@KevinEsche 哦,那是真的!但是如果它不是整数,你将如何处理所有这些方法?即必须将邮政编码除以 10,等等。
-
@jaynepants 您不除以 10,而是使用
charAt()一次提取一个数字字符。 -
为什么有人努力回答你的问题后,你才删除它,以帮助你?
-
你为什么要贬低这个问题的文字??