是否有更简单的方法以交替的顺序输出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);
}
答案 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 o
和char 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));