2012-05-21 26 views
2

我只是想知道是否可以用数字格式显示数字。 在这我们正在接受控制台的号码。如何打印像7段显示器的多位数字

例如:

123 should be display in following format, and in one line. 
    _ _ 
| _| _| 
| |_ _| 

我使用开关壳体尝试,但没有得到适当的方法

"arg" is char array; 
char c; 
for(i=0;i<3;i++) 
{ 
c=arg[i]; 
switch(char) 
{ 

    case '1' : System.out.println("|"); 
       System.out.println("|"); 
       break; 
    case '2' : System.out.println("-"); 
       System.out.println(" "+"|"); 
       System.out.println("-"); 
       System.out.println("|"); 
       System.out.println("-"); 
       break; 

    same for all digit 
} 
} 

我知道这是不显示正确的解决方案。

这是使用java的任何替代方案。

编辑 Joe提出的更新代码。有用。

 /** 
     * @author Amit 
     */ 
     public class DigitalDisplay { 
      /** 
      * @param args 
      */ 
       public static void main(String[] args) { 
     String [][] num=new String[4][3]; 
     num[0][0]="|-|"; 
     num[0][1]="| |"; 
     num[0][2]="|_|"; 

     num[1][0]=" |"; 
     num[1][1]=" |"; 
     num[1][2]=" |"; 

     num[2][0]=" -|"; 
     num[2][1]=" _|"; 
     num[2][2]=" |_"; 

     num[3][0]=" -|"; 
     num[3][1]=" _|"; 
     num[3][2]=" _|"; 
     int[] input = {2,1,3}; 
     for (int line = 0; line < 3; line++) 
     {   
      for (int inputI=0; inputI < input.length; inputI++) 
      { 
       int value = input[inputI]; 
       System.out.print(num[value][line]); 
       System.out.print(" "); 
      }   
      System.out.println(); 
     } 
    } 
} 

**OUTPUT** 

-| | -| 
_| | _| 
|_ | _| 

@Joe:谢谢。

+0

有什么不对您的解决方案?使用“_”而不是“ - ”,它应该工作 – Hachi

+0

“没有合适的方法” - 更具描述性。问题是什么? –

+0

我认为你需要退一步 - 你想在哪里显示这些数字(上下文是什么),以及为什么在这种特殊的形式?您的需求是否可以通过使用不同的字体来满足? –

回答

4

,你需要在每个行扫描,建立不起来。

以下所有都是伪代码,但我相信您可以将其翻译成Java。您需要创建一个网格并确保每个数字具有相同的宽度和高度。

1 - 设置每个数字的初始数据。你可以做到这一点作为一个二维数组(尺寸1:数字,尺寸2:行)例如:

numbers[0][0] = "|-|" 
numbers[0][1] = "| |" 
numbers[0][2] = "|_|" 

numbers[1][0] = " |" 
numbers[1][1] = " |" 
numbers[1][2] = " |" 

2 - 对于每个构成字符线,在你输入在每个数字扫描和写入适当的字符串这将逐行建立字符。

input = [1,2,3] 
digit_height = 3 

for line digit_height: 
    for digit in input: 
     print numbers[digit][line] 
     print " " to space between characters 
    print new line 

精细,这里是在Java:

int[] input = {2,1,3}; 
    for (int line = 0; line < 3; line++) 
    {   
     for (int inputI=0; inputI < input.length; inputI++) 
     { 
      int value = input[inputI]; 
      System.out.print(num[value][line]); 
      System.out.print(" "); 
     }   
     System.out.println(); 
    } 
+0

我喜欢伪代码的答案。 :) – Bombe

+0

@Joe:谢谢你的一些很好的解决方案,但它仍然会在下一行打印。可以在同一行显示吗? – Raje

+0

它不应该。你编码了吗?显示你的代码,我会看看。 – Joe

0

这里至少有3种不同的非常基本的语法错误,更不用说任何逻辑错误了。

  • char是保留字,所以您不能将其用于变量名。
  • switch写到小写(像Java中所有其他关键字)
  • "1"是一个字符串文字,而不是字面char。使用单引号为char文字。
+0

感谢您纠正语法错误。我会更新它。我只是想知道任何其他更好的逻辑。 – Raje

1

下面是数字时钟一些例子,如果你有一个以上的字符可能有帮助你Digital clock

1

最简单的方法是,绘制一个8,并储存起来。然后根据所需的数字,您可以知道需要打印8个哪个笔划,哪些不需要打印。

实施例:

8:

_ 
|_| 
|_| 

对于1,只是打印右半

| 
| 

对于2,忽略相应的笔划,

_ 
    _| 
|_ 

对其他人也一样。这也是7段显示器的实际工作原理。

有一个数组存储所需的7个笔划的值。 然后对于8,您的阵列可能类似于:{1,1,1,1,1,1,1} 对于1,您的阵列可能类似于:{0,0,0,1,0,0,1}其中0表示不打印笔画,1表示打印笔画。

然后在此数组的基础上打印笔划。这比简单地使用switch箱子并为每个号码打印相应要好。只需遍历数组元素,决定是否打印笔画。

对于你给出的例子123,有一个二维数组。值可以去{{0,0,0,1,0,0,1},{1,0,1,1,1,1,0},{1,0,1,1,0,1,1}}

然后比较数组中的值并打印您的笔画!

编辑: 示例代码:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
String s; 
s = br.readLine(); 
int n; 
n = Integer.parseInt(s); 
int stroke = 1; 
int arr[] = new int[8]; 
if(s == 2) 
    arr[] = {1,0,1,1,1,1,0}; 
for(int i=0;i<8;i++) 
{ 
if(arr[i] == 1 && stroke = 1) 
    System.out.println(" _"); 
    stroke++; 
    break; 
if(arr[i] == 1 && stroke = 2) 
    System.out.print("|"); 
    stroke++; 
    break; 
if(arr[i] == 1 && stroke = 3) 
    System.out.print("_"); 
    stroke++; 
    break; 
if(arr[i] == 1 && stroke = 4) 
    System.out.println("|"); 
    stroke++; 
    break; 
if(arr[i] == 1 && stroke = 5) 
    System.out.print("|"); 
    stroke++; 
    break; 
if(arr[i] == 1 && stroke = 6) 
    System.out.println("_"); 
    stroke++; 
    break; 
if(arr[i] == 1 && stroke = 7) 
    System.out.println("|"); 
    stroke++; 
    break; 
} 

一旦一个号码被打印出来,你可以使用JLine库替换你的光标在控制台上与下一个号码重新开始(虽然我不是。确定它)。

它可能需要一点点调整才能得到正确的答案!

+0

这并不回答关于如何真正做到这一点的问题。 – Joe

+0

它确实,不是吗? :-) –

+0

@KazekageGaara:你能否提供关于这方面的更多细节? – Raje

0

您可以创建一个新的类,输出数字加上一个函数来存储您想要打印的内容和一个打印函数。

例子:

public class DigitalNumbers{ 

    private String buffer = ""; 
    private int lines = 5; // Number's height 
    private String number0[] = { 
     "___ ", 
     "| | ", 
     "| | ", 
     "| | ", 
     "¯¯¯ " 
    }; 
    private String number1[] = { 
     " ", 
     "| ", 
     "| ", 
     "| ", 
     " " 
    }; 
    //... 

    public DigitalNumbers(){ 

    } 

    public void add(char c){ 
     buffer += c; 
    } 

    public void print(){ 
     for(int i=0; i<lines; i++){ 
     for(int j=0; j<buffer.length(); j++){ 
      switch(buffer.charAt(j)){ 
       case '0': System.out.print(number0[i]); break; 
       case '1': System.out.print(number1[i]); break; 
       //... 
       default: break; 
      } 
     } 
     System.out.print("\n");   
     } 
     buffer = ""; 
    } 

} 

然后用这样的:

DigitalNumbers DG = new DigitalNumbers(); 
for(int i=0;i<3;i++){ 
    DN.add(arg[i]); 
} 
DG.print();