把给定任意数字变成LCD的7段显示

最近做了一个笔试题,还好没被鄙视。原题如下:

把给定任意数字变成LCD的7段显示


输入:

输入文件包含多行,每个要显示的数占一行。每一行包含两个整数S和N。其中N是要显示的数(比如1234, 48384, 100000234)。S是显示的LCD图案的尺寸(S<10)

输出:

以LCD的样式print出输入文件指定的数。横线用'-'(减号)组成, 竖线用'|'(管道号)组成。
每一个数字刚好占据 S+2列, 2*S+3行。
数字之间用空列分割。
数之间用空行分割。

输入示例:

2 12345
3 67890

输出示例:

      --   --        --
   |    |    | |  | |   
   |    |    | |  | |   
      --   --   --   --
   | |       |    |    |
   | |       |    |    |
      --   --        --

 ---   ---   ---   ---   ---
|         | |   | |   | |   |
|         | |   | |   | |   |
|         | |   | |   | |   |
 ---         ---   ---       
|   |     | |   |     | |   |
|   |     | |   |     | |   |
|   |     | |   |     | |   |
 ---         ---   ---   ---

以下是Java实现,代码如下:

package interview;

public class LCDDisplay {

	public static void main(String[] args) throws Exception{
		LCDDisplay lcd = new LCDDisplay();
		lcd.println(1, "12345");
		lcd.println(2, "12345");
		lcd.println(3, "67890");
		lcd.println(4, "67890");
		//lcd.println(0, "67890");
		//lcd.println(14, "67890");
		//lcd.println(4, "x67890");
	}

	String zero[] = {
			" - ",
			"| |",
			"   ",
			"| |",
			" - "
			};

	String one[] = {
			"   ",
			"  |",
			"   ",
			"  |",
			"   "
			};

	String two[] = {
			" - ",
			"  |",
			" - ",
			"|  ",
			" - "
			};

	String three[] = {
			" - ",
			"  |",
			" - ",
			"  |",
			" - "
			};

	String four[] = {
			"   ",
			"| |",
			" - ",
			"  |",
			"   "
			};

	String five[] = {
			" - ",
			"|  ",
			" - ",
			"  |",
			" - "
			};

	String six[] = {
			" - ",
			"|  ",
			" - ",
			"| |",
			" - "
			};

	String seven[] = {
			" - ",
			"  |",
			"  |",
			"  |",
			"   "
			};

	String eight[] = {
			" - ",
			"| |",
			" - ",
			"| |",
			" - "
			};

	String nine[] = {
			" - ",
			"| |",
			" - ",
			"  |",
			" - "
			};


	String number[][]= {zero, one, two, three, four, five, six, seven, eight, nine};

	public int width;
	public LCDDisplay(){
	}

	/**
	 * print one segment for a digit
	 * @param line
	 * @param skip
	 */
	private void printSegment(String line){
		char array[] = line.toCharArray();
        int len = array.length;
		for (int k = 0; k < len; k++) {
			char c = array[k];
			if (k != 1) {
				System.out.print(c);
			}
			else
			{
				for(int i = 0; i < this.width; i++) {
					System.out.print(c);
				}
			}
		}
		System.out.print(' ');
	}

	/**
	 * print one segment for all digits
	 * @param digits
	 * @param j
	 */
	private void printSegments(String digits, int j) {
		char array[] = digits.toCharArray();
		for (char c : array) {
			int digit = Integer.parseInt(c + ""); // throw NumberFormatException
			printSegment(number[digit][j]);
		}
		System.out.println();
	}

	public void println(int width, String digits) throws Exception {
		if (width < 1 || width > 10) {
			throw new Exception("The width must be in range (1,10)");
		}
		this.width = width;
		for(int j = 0; j < 5; j++) {
			if (j % 2 == 0) {
				printSegments(digits, j);
			}
			else {
				for (int k = 0; k < this.width; k++) {
					printSegments(digits, j);
				}
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值