Как писать группы чисел, используя Console.Write? - PullRequest
1 голос
/ 02 марта 2012

Я очень новичок в C # (и Stack Overflow, прости меня за плохой этикет здесь), и я пишу игру Mastermind в консольном приложении.Я пытаюсь показать список догадок пользователя в конце игры, и я знаю, что с помощью Console.WriteLine ();просто даст мне 30 с лишним строк от чисел, которые ничего не говорят пользователю.

Как я могу изменить свой код, чтобы программа отображала 4 числа в группе одновременно?Например:

1234

1234

1234

//Store numbers in a history list
ArrayList guesses = new ArrayList(); //This is the ArrayList

Console.WriteLine("Please enter your first guess.");
guess1 = Convert.ToInt32(Console.ReadLine());
guesses.Add(guess1);

foreach (int i in guesses)
{
    Console.Write(i);
}

Ответы [ 4 ]

2 голосов
/ 02 марта 2012

Я предполагаю, что каждый элемент вашего байтового массива представляет собой одну цифру (0-9).Если это предположение неверно - пожалуйста, дайте мне знать, я изменю код :)

Action<IEnumerable<int>> dump = null;

dump = items =>
            {
                if(items.Any())
                {
                  var head = String.Join("", items.Take(4));
                  Console.WriteLine(head);
                  var tail = items.Skip(4);
                  dump(tail);
                }
            };

dump(guesses);
0 голосов
/ 02 марта 2012

Это то, что я быстро соединил:

Обновление:

ArrayList guesses = new ArrayList(); //This is the ArrayList
    // Four or more
    guesses.Add(1); guesses.Add(2);
    guesses.Add(3);guesses.Add(4);
    guesses.Add(5); guesses.Add(6); guesses.Add(7);guesses.Add(8); guesses.Add(9);
    //Uncomment-Me for less than four inputs
    //guesses.Add(1); guesses.Add(2);
    int position = 0;
    if (guesses.Count < 4)
    {
        for (int y = 0; y < guesses.Count; y++)
        {
            Console.Out.Write(guesses[y]);
        }
    }
    else
    {
        for (int i = 1; i <= guesses.Count; i++)
        {
            if (i%4 == 0)
            {
                Console.Out.WriteLine(string.Format("{0}{1}{2}{3}", guesses[i - 4], guesses[i - 3],
                                                    guesses[i - 2], guesses[i - 1]));
                position = i;
            }
            else
            {
                if (i == guesses.Count)
                {
                    for (int j = position; j < i; j++)
                    {
                        Console.Out.Write(guesses[j]);
                    }
                }
            }
        }

    }
0 голосов
/ 02 марта 2012
List<int> endResult = new List<int>();
StringBuilder tempSb = new StringBuilder();
for(int i=0; i < groups.Count; i++)
{
    if(i % 4 == 0) {
        endResult.Add(int.Parse(sb.ToString()));
        tempSb.Clear(); // remove what was already added
    }
    tempSb.Append(group[i]);
}
// check to make sure there aren't any stragglers left in
// the StringBuilder. Would happen if the count of groups is not a multiple of 4
if(groups.Count % 4 != 0) {
    groups.Add(int.Parse(sb.ToString()));
}

Это даст вам список из 4-х цифр и убедитесь, что вы не потеряете ни одного, если ваше число в списке групп не кратно 4. Обратите внимание, что я продолжаю, основываясь на том, что вы предоставили , Таким образом, группы это ArrayList из целых.

0 голосов
/ 02 марта 2012

Похоже, что вы в основном там, у вас есть консольная запись, которая записывает их все без переносов строк. Затем добавьте целое число count и установите его в ноль. Увеличьте его на единицу в цикле foreach. count % 4 == 0 будет истинно для всех значений, кратных четырем. Это означает, что вы можете прикрепить блок if строкой записи, чтобы получить группы по четыре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...