簡體   English   中英

將數組打印為表c#

[英]Printing out array as a table c#

我無法讓我的程序打印出整齊有序的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();
 }

如果您需要更多代碼,請告訴我。 如果有人知道更好的打印方式,請告訴我。 非常感謝所有幫助。

在這里看一下這篇文章: 在Console.WriteLine方法中格式化字符串

填充肯定是你的答案。 根據您的需要,您可以在屬性中的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);

如果查看String.PadRight()方法 ,您將看到它String.PadRight()帶有空白字符的字符串,直到它是指定的寬度。 我們可以使用name字段執行此操作,選擇一些合理的最大名稱長度(可能是25?)來調整列的大小。

此外,您可以考慮在Employee類上覆蓋ToString()方法,而不是PrintEmployee方法,因此employee.ToString()的默認值將按您希望的方式顯示。 例如:

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}";
    }
}

現在我們將名稱顯示在一個20個字符的列中(並且雙精度數顯示為正確的小數位),事情應排好:

static void Main()
{
    var employees = new List<Employee>
    {
        new Employee {Name = "Bruce Wayne", Number = 123456, Rate = 25.88, Hours = 35.5},
        new Employee {Name = "Clark Kent", Number = 232344, Rate = 25.88, Hours = 38.75},
        new Employee {Name = "Diana Prince", Number = 657659, Rate = 27.62, Hours = 30.25},
        new Employee {Name = "Hal Jordan", Number = 989431, Rate = 23.14, Hours = 44.25},
        new Employee {Name = "Barry Allan", Number = 342562, Rate = 25.12, Hours = 25.50},
        new Employee {Name = "Arthur Curry", Number = 565603, Rate = 21.09, Hours = 23.75},
        new Employee {Name = "John Jones", Number = 812984, Rate = 18.99, Hours = 32.75},
        new Employee {Name = "Dinah Lance", Number = 342988, Rate = 18.99, Hours = 34.50},
        new Employee {Name = "Oliver Queen", Number = 340236, Rate = 17.45, Hours = 41.25},
        new Employee {Name = "Ray Palmer", Number = 120985, Rate = 24.75, Hours = 40.00},
        new Employee {Name = "Ronald Raymond", Number = 239824, Rate = 16.43, Hours = 35.00},
        new Employee {Name = "Carter Hall", Number = 657123, Rate = 19.34, Hours = 42.75},
        new Employee {Name = "Shayera Hol", Number = 761742, Rate = 16.73, Hours = 38.50},
    };

    foreach (var employee in employees)
    {
        Console.WriteLine(employee);
    }

    Console.Write("\nDone!\nPress any key to exit...");
    Console.ReadKey();
}

產量

在此輸入圖像描述

為了編程的樂趣,你也可以這樣做:

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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM