将数组打印为表c#

时间:2017-09-27 22:27:38

标签: c# arrays printing

我无法让我的程序打印出整齐有序的Employee类对象数组。我将证明我的代码,有人可以告诉我如何构建我的写声明来实现这一目标。

实际输出是什么:

Bruce Wayne, 123456, 25.88, 35.50
Clark Kent 232344 25.88 38.75
Diana Prince 657659 27.62 30.25
Hal Jordan 989431 23.14 44.25
Barry Allan 342562 25.12 25.50
Arthur Curry 565603 21.09 23.75
John Jones 812984 18.99 32.75
Dinah Lance 342988 18.99 34.50
Oliver Queen 340236 17.45 41.25
Ray Palmer 120985 24.75 40.00
Ronald Raymond 239824 16.43 35.00
Carter Hall 657123 19.34 42.75
Shayera Hol 761742 16.73 38.50

输出应该是什么:

Bruce Wayne    123456 25.88 35.50
Clark Kent     232344 25.88 38.75
Diana Prince   657659 27.62 30.25
Hal Jordan     989431 23.14 44.25
Barry Allan    342562 25.12 25.50
Arthur Curry   565603 21.09 23.75
John Jones     812984 18.99 32.75
Dinah Lance    342988 18.99 34.50
Oliver Queen   340236 17.45 41.25
Ray Palmer     120985 24.75 40.00
Ronald Raymond 239824 16.43 35.00
Carter Hall    657123 19.34 42.75
Shayera Hol    761742 16.73 38.50

// This is from the Employee class.
public void PrintEmployee()
{
    Console.WriteLine(name + " " + number + " " + rate + " " + hours + " 
    " + gross);
}

// This is from main program.
for (int i = 0; i < Employees.Length; i++)
{
    if (Employees[i] == null)
    {
        break;
    }
    Employees[i].PrintEmployee();
 }

如果您需要更多代码,请告诉我们。 如果有人知道更好的打印方式,请告诉我。 非常感谢所有帮助。

3 个答案:

答案 0 :(得分:1)

在这里看一下这篇文章: Format Strings in Console.WriteLine method

Padding肯定是你的答案。根据您的需要,您可以在属性中的getter上的Employee Class级别填充它们。

或者做这样的事情:

var name = "Ronald Raymond";
var number = "239824";
var rate = "16.43";
var hours = "35.00";
var gross = "1256";

var formatted = string.Format("{0,-15}", name) +
    string.Format("{0,-7}", number) +
    string.Format("{0,-7}", rate) +
    string.Format("{0,-7}", hours) +
    string.Format("{0,-7}", gross);

Console.WriteLine(formatted);

答案 1 :(得分:1)

如果你查看String.PadRight() method,你会发现它填充了一个带有空格字符的字符串,直到它是指定的宽度。我们可以使用name字段执行此操作,选择一些合理的最大名称长度(可能是25?)来确定列的大小。

此外,您可能会考虑覆盖sizeof(a)/sizeof(a[0])类上的PrintEmployee方法,而不是ToString()方法,因此Employee的默认值将按您希望的方式显示。例如:

employee.ToString()

现在我们的名字显示在一个20个字符的列中(并且双打显示有正确的小数位),事情应该排好了:

public class Employee
{
    public string Name { get; set; }
    public int Number { get; set; }
    public double Rate { get; set; }
    public double Hours { get; set; }

    public override string ToString()
    {
        return $"{Name.PadRight(20)} {Number} {Rate:00.00} {Hours:00.00}";
    }
}

<强>输出

enter image description here

答案 2 :(得分:0)

为了编程的乐趣,你也可以这样做:

String FixStringLength(String input, int length) {
   Char[] temp = new Char[length];
   for(int i = 0; i < length; i++){
      if(i < input.Length){
         temp[i] = input[i];
      }
      else{
         temp[i] = ' ';
      }
   }
   return new String(temp);        
}

然后

Console.WriteLine(FixStringLength(name, 30) + number);