2017-01-31 12 views
0

私はTic-Tac-Toeのためのゲームボードのような配列を作成しましたが、私はどのようにしてデザインの問題を解決するのか分かりません。最初の2行では問題ありませんが、最後の行では各要素間にスペースがありません。 screenshot http://upnisito.cz/images/2017_01/648array.png配列Cのスタイル設定#

はあなたの助けをありがとう!それが好きなのを見てどのように

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ProjectTicTacToe 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine(" A B C"); 
      Console.WriteLine(); 

      string[,] deska = new string[,] { 
       { "1 ", "2 ", "3 " }, 
       { "0 ", "0 ", "0" }, 
       { "0 ", "0 ", "0" }, 
       { "0 ", "0 ", "0" }, 
      }; 

      for (int j = 0; j < deska.GetLength(1); j++) 
      { 
       for (int i = 0; i < deska.GetLength(0); i++) 
       { 
        Console.Write(deska[i, j]); 
       } 
       Console.WriteLine(); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 

+1

「deska [i、j]」を「deska [j、i]」に反転させます。 –

+1

データが転置されているため、トラバーサルとアラインメントが厄介です。行ごとに移動した場合、「0」には他のスペースが含まれていない場合は最後のセットが表示されます。 –

+0

ありがとう!データの印刷方法を変更する方法を教えてください。今のように最初の行は1 2 3などでなければなりません...? forループでiとjを切り替えると、インデックスが配列の境界線から外れています...ありがとうございました:) –

答えて

1

やクイックフィックスのために、このようなあなたの配列を宣言してみてください。

string[,] deska = { 
      { "1 ", "2 ", "3 " }, 
      { "0 ", "0 ", "0 " }, 
      { "0 ", "0 ", "0 " }, 
      { "0 ", "0 ", "0 " } 
     }; 

更新:コンソール出力を管理するために多くの柔軟性を持っている。また、C#で、少し下の例を参照してください。これは一般的な解決策ではありませんが、あなたが望むようにこれを行うことができます。

using System; 

namespace ProjectTicTacToe 
{ 
    internal class Program 
    { 
    private static void Main() 
    { 
     Console.WriteLine(" A B C"); 
     Console.WriteLine(); 

     string[,] deska = 
      { 
       { "1 ", "2 ", "3 " }, 
       { "0 ", "0 ", "0" }, 
       { "0 ", "0 ", "0" }, 
       { "0 ", "0 ", "0" }, 
      }; 

     int prevLenght = 0; 
     int currentLenght = 0; 
     for (int i = 0; i < deska.GetLength(0); i++) 
     { 
     currentLenght += prevLenght; 
     for (int j = 0; j < deska.GetLength(1); j++) 
     { 
      Console.SetCursorPosition(currentLenght, Console.CursorTop); 
      prevLenght = deska[i, j].Length + 1; 
      Console.WriteLine(deska[i, j]); 
     } 

     Console.CursorTop -= deska.GetLength(1); 
     } 
     Console.ReadKey(); 
    } 
    } 
} 
2

文字列の内部にレイアウトをプリフォーマットするのではなく、プログラムでそれを実行させてください。

Console.WriteLine(String.Format("{0,8}{1,3}{2,3}","A","B","C")); 
Console.WriteLine(); 
string[,] deska = new string[,] { 
    { "1", "2", "3" }, 
    { "0", "0", "0" }, 
    { "0", "0", "0" }, 
    { "0", "0", "0" }, 
}; 

for (int j = 0; j < deska.GetLength(1)-1 ; j++) 
{ 
    Console.WriteLine(String.Format("{0,-5}{1,3}{2,3}{3,3}",deska[0,j],deska[1,j],deska[2,j],deska[3,j])); 
} 
Console.ReadKey(); 
+0

以前はstring.formatで使用されていたアラインメントのものは見たことがありません。今日私は新しいことを学びました。ありがとうございました。 :) – Chris

+1

私は以前に数字を使っていましたが、数字の行を整列するために空きスペースを埋めることができることを知っていました。 – Edward

関連する問題