最近做了一个笔试题,还好没被鄙视。原题如下:
把给定任意数字变成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);
}
}
}
}
}