我正在尝试创建条形码程序,我很好奇我将如何限制扫描每个字符,然后将每个条形码应用于每个字符并打印出来 所以如果用户输入54224然后输出“:| | | :: | :: | :: | | :: :: |:|:| :: |”什么是最好的方法。
import javax.swing.JOptionPane;
public class Helloworld {
public static void main (String[]args){
String input1= JOptionPane.showInputDialog("You should enter a number");
int num1 = Integer.parseInt( input1);
if (num1 == 1){
System.out.print(":::||");
}
if (num1 == 2){
System.out.println("::|:|");
}
if (num1 == 3){
System.out.println("::||:");
}
if (num1 == 4){
System.out.println(":|::|");
}
if (num1 == 5){
System.out.println(":|:|:");
}
if (num1 == 6){
System.out.println(":||:::");
}
if (num1 == 7){
System.out.println("|:::|");
}
if (num1 == 8){
System.out.println("|::|:");
}
if (num1 == 9){
System.out.println("|:|::");
}
if (num1 == 0){
System.out.println("||:::");
}
}
}
答案 0 :(得分:0)
您可以像这样压缩代码:
List<String> codes = Arrays.asList ("||:::", "::|:|", "::||:", ":|::|", ":|:|:", ":||:::", "|:::|", "|::|:", "|:|::");
用递归方法调用它:
String num2code (int n) {
return (n > 0) ? num2code (n/10) + codes.get (n % 10) : "";
}
-> num2code (54170)
| Expression value is: ":||::::|:|:::|:||::|:||:::"
| assigned to temporary variable $4 of type String
如果您喜欢长片,可能会增加可能的尺寸。
单个0没有产量输出,并且每个前导0都会丢失,因此如果您必须处理此类输入,则必须更改为基于字符的方法。
答案 1 :(得分:0)
您可以使用Switch
为每个数字选择模式,然后将其插入StringBuilder
的开头并从中返回String
。
要获取每个数字,您可以使用modulo
运算符,然后除以10
,您将以相反的顺序得到数字,这就是为什么您需要在每个数字前加上每个数字的模式到StringBuilder
例如:
public class BarCodeTranslator {
public static void main(String[] args) {
System.out.println(convertInputToBarCode(54224));
}
private static String convertInputToBarCode(int input) {
StringBuilder sb = new StringBuilder();
String pattern = "";
do {
int mod = input % 10;
switch (mod) {
case 1:
pattern = ":::||";
break;
case 2:
pattern = "::|:|";
break;
case 3:
pattern = "::||:";
break;
case 4:
pattern = ":|::|";
break;
case 5:
pattern = ":|:|:";
break;
case 6:
pattern = ":||:::";
break;
case 7:
pattern = "|:::|";
break;
case 8:
pattern = "|::|:";
break;
case 9:
pattern = "|:|::";
break;
default: //0 digit
pattern = "||:::";
break;
}
sb.insert(0, pattern);
input /= 10;
} while (input != 0);
return sb.toString();
}
}
产地:
:|:|::|::|::|:|::|:|:|::|