我将如何扫描每个角色

时间:2018-02-21 17:57:41

标签: java

我正在尝试创建条形码程序,我很好奇我将如何限制扫描每个字符,然后将每个条形码应用于每个字符并打印出来 所以如果用户输入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("||:::");
    }


}

}

2 个答案:

答案 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();
    }
}

产地:

:|:|::|::|::|:|::|:|:|::|