我的任务是为用户输入的邮政编码创建一个条形码。我找不到一种方法,如果用户输入以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());
}
}
答案 0 :(得分:1)
创建一个HashMap实例,您可以在其中存储相当于每个字符的条形码,从'0'到'9'int数。
Hashmat<Character, String> charBarMap = new HashMap<Character, String>();
intBarMap.put('0',"||:::");
intBarMap.put('1',":::||");
...
...
由于你不能在int中使用前导0,你需要使用String格式的邮政编码。
从该字符串中检索每个字符并使用hashMap表获取该字符的条形码字符串表示形式(“0”到“9”)并继续追加到您的字符串。
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));
}
答案 1 :(得分:0)
如果变量是一个字符串,你可以删除前导零...然后将其转换为int。 使用String.replaceFirst(String regex)删除前导零。 要转换为int,请使用类似这样的内容 int foo = Integer.parseInt(“1234”)
答案 2 :(得分:0)
你的问题是合乎逻辑的:1234号......那是什么:01234,或12340?!
因此,您无法将邮政编码表示为数字。相反,邮政编码唯一有效的格式是长度为5的字符串,只包含数字!
换句话说:你的类应该只将一个字符串作为构造函数的参数;并在那里你做进一步的验证(如检查长度/内容),如果传入的邮政编码无效,则抛出异常。
因此:在任何地方都没有转换为int;一切都发生在字符串/字符上。当然,您可以使用方法为索引0,1,2提供数字...作为int;但一般来说,你最好将ZIP表示为字符串!