在C#中更容易输出Char输出?

时间:2015-07-24 15:43:59

标签: c#

是否有更简单的方法以交替的顺序输出X 8次?所以它最终看起来像这个“XOXOXOXO”。我的意思是这个有效,但它的丑陋。谢谢。

        char x = "X" [0];
        char o = "O" [0]; 

        Console.WriteLine("Should X or O go first: ");
        String answer = Console.ReadLine ();



            if (answer == "x") {


            for( int a = 0; a < 4; a++) {

                Console.WriteLine("{0}{1}{2}{3}{4}{5}{6}{7}", x, o, x, o, x, o, x, o);
                Console.WriteLine("{0}{1}{2}{3}{4}{5}{6}{7}", o, x, o, x, o, x, o, x);

                } 

5 个答案:

答案 0 :(得分:7)

您可以使用%运算符和LINQ:

Console.Write(String.Concat(Enumerable.Range(0, 8).Select(i => "XO"[i % 2])));

答案 1 :(得分:6)

Console.WriteLine(string.Concat(Enumerable.Repeat("xo", 4)));
Console.WriteLine(string.Concat(Enumerable.Repeat("ox", 4)));

此外,您可以只说char x = "X"[0];而不是说char x = 'X';(虽然看起来基于您提供的代码,但您不需要char x和{{ 1}}。)

修改:如果您确实希望保留char ochar x并在char o循环中使用它们,则可以执行此操作:

for

答案 2 :(得分:5)

/* ... */
for( int a = 0; a < 4; a++) {
     Console.WriteLine("{0}", a % 2 == 0 ? x : o);
}
/* ... */

或者,简写:

/* ... */
for( int a = 0; a < 4; a++) {
     Console.WriteLine("XO"[a % 2]);
}
/* ... */

Modulus Operator是你的朋友。

答案 3 :(得分:1)

您可以使用StringBuilder多次附加文本:

Console.WriteLine("Should X or O go first: ");
string answer = Console.ReadLine().ToUpper();
StringBuilder sb = new StringBuilder();

if (answer.Equals("X"))
{
    for (int i = 0; i < 4; i++)
        sb.Append("xo");
}
else
{
    for (int i = 0; i < 4; i++)
        sb.Append("ox");
}

Console.WriteLine(sb.ToString());

在你的情况下,它并不是一个真正的问题,但字符串连接并不是很好,所以使用StringBuilder通常是一个更好的主意和良好的习惯。

答案 4 :(得分:0)

感觉就像加上我的2美分。

Console.WriteLine("XOXOXOXOX".Substring(answer == "x" ? 0 : 1, 8));