2013-02-10 3 views
1

선생님이 저에게 준 미친 서식 지정 지침을 수행하려고합니다. 아마 한시간 동안 (이 첫 번째 C# 프로그램입니다) 익숙해지면이 코드 줄을 생각해 냈습니다.C# 출력은 어떻게 든 프로그램 이름과 클래스 이름입니다.

`Console.WriteLine(String.Format("{0," + -longestTitle + "} | {1," + -longestAlbumTitle + "} | {2," + -longestArtist + "} | {3:0.00, 8} | {4," + -longestYearAndRating + "} |", songArray[arraySearcher].title, songArray[arraySearcher].albumTitle, songArray[arraySearcher].artist, songArray[arraySearcher].length, songArray[arraySearcher].yearAndRating));` 

는 longestX는 longestX의 문자 수 (where x = title, 앨범 등)이 포함되고있는 int입니다. 내가 좋아하는 것

출력은 다음과 같은 : (모든 패딩 동적 사용자 또는 파일에 의해 가장 긴 타이틀 입력에 따라 결정된다)

Stuff | morestuff | extrastuff | 5.92 | 1992:R | 
Stuf | est  | sfafe  | 232.44 | 2001:PG | 
S uf | e   | sfe  | .44 | 2001:G | 

.

내가 얻을 출력은 다음과 같습니다 (특히 또는, Tyler_Music_Go.Song)

Program_Example.ClassName 
Program_Example.ClassName 

나는이 같은 방법으로 songArray[arraySearcher] .title을 인쇄 한, 그리고 그것을 잘 작동합니다.

누군가 나를 도와 줄 수 있습니까?

전체 관련 코드 :

class Song { 
    public string title, albumTitle, yearAndRating, artist; 
    public float length; 

    public Song(string titl, string albumTitl, string art, float leng, string yrNRating) 
    { 
     title = titl; 
     albumTitle = albumTitl; 
     yearAndRating = yrNRating; 
     length = leng; 
     artist = art; 
    } 
} 

//This class contains a Song array (with all Songs contained within), an array index, a search index, and ints to determine the longest of each category. 
class SongList 
{ 
    Song[] songArray; 
    private int arrayKeeper, longestTitle, longestArtist, longestAlbumTitle, longestYearAndRating, checker; 
    int arraySearcher = 0; 

    public SongList() 
    { 
     songArray = new Song[10000]; 
     arrayKeeper = 0; 
     longestTitle = 0; 
     longestArtist = 0; 
     longestAlbumTitle = 0; 
     longestYearAndRating = 0; 
    } 

    public void AddSong(string title, string albumTitle, string artist, float length, string yearAndRating) 
    { 
     songArray[arrayKeeper] = new Song(title, albumTitle, artist, length, yearAndRating); 
     arrayKeeper++; 
     checker = 0; 

     //This section of code is responsible for formatting the output. Since the longest values are already known, the list can be displayed quickly. 
     //Once a song is deleted, however, previously calculated longest lengths still stand. 
     foreach (char check in title) 
     { 
      checker++; 
     } 
     if (checker > longestTitle) 
     { 
      longestTitle = checker; 
     } 

     foreach (char check in albumTitle) 
     { 
      checker++; 
     } 
     if (checker > longestAlbumTitle) 
     { 
      longestAlbumTitle = checker; 
     } 

     foreach (char check in artist) 
     { 
      checker++; 
     } 
     if (checker > longestArtist) 
     { 
      longestArtist = checker; 
     } 

     foreach (char check in yearAndRating) 
     { 
      checker++; 
     } 
     if (checker > longestYearAndRating) 
     { 
      longestYearAndRating = checker; 
     } 

    } 

    //public bool RemoveSong(string title) 
    // { 
    //} 

    public void DisplayData() 
    { 
     Console.WriteLine("|   Title   |   Album Title   |   Artist   |   Length   |   Year and Rating   |"); 
     for (arraySearcher = 0; arraySearcher < arrayKeeper; arraySearcher++) 
     { 
      //This line for testing purposes. (works) 
      Console.WriteLine(songArray[arraySearcher].title); 
      Console.WriteLine(songArray[arraySearcher].ToString()); 
     } 
    } 

    public override string ToString() 
    { 
     //This line for testing purposes. (works) 
     Console.WriteLine(songArray[arraySearcher].title); 
     return String.Format("{0," + -longestTitle + "} | {1," + -longestAlbumTitle + "} | {2," + -longestArtist + "} | {3:0.00, 8} | {4," + -longestYearAndRating + "} |", songArray[arraySearcher].title, songArray[arraySearcher].albumTitle, songArray[arraySearcher].artist, songArray[arraySearcher].length, songArray[arraySearcher].yearAndRating); 
    } 
} 

`

편집 :

자, 이제 내가 바보의 모든 영지을 느낍니다. SongList의 tostring() 메서드를 덮어 쓰고 Song의 tostring 메서드를 호출했습니다. 대답 한 가이 나를 깨닫게했다. 그래도 조언을 주신 모든 분들께 감사드립니다.

+0

Song 클래스에서 다른 클래스의 출력을 원하면 ToString() 메서드를 재정의해야합니다. –

+0

나는 tostring 메소드를 오버라이드하고있다. 어쩌면 나는 모든 것을 게시해야 할 것입니다. –

+0

출력 기능을 여러 줄로 분리하십시오. 'formattedTitle'과 같은 각 열에 대한 임시 변수를 도입 한 다음 끝에 결합하십시오. – CodesInChaos

답변

1

노래 클래스에서 직접 속성 (songVariable.Title)에 액세스하거나 ToString()을 덮어 써야 해당 출력이 제목을 갖습니다.

public class Song 
{ 
    public string Title {get; set;} 

    public override string ToString() 
    { 
     return Title; 
    } 
} 
+0

그렇다면 왜 Console.WriteLine (songArray [arraySearcher] .title); 그 직전에 작동합니까? 그것은 String.Format 때문에 다른가요? –