задача 06.Cards game - List Exercise -C#- Tech
Здравейте.
Ще се радвам някой да погледне кода,който така или иначе гърми с Exception,понеже още ми е мътно да разбера къде ми е грешката...Не знам дали изобщо би бил ок и кода де.
https://pastebin.com/XDRZVp0L
You will be given two hands of cards, which will be integer numbers. Assume that you have two players. You have to find out the winning deck and respectively the winner.
You start from the beginning of both hands. Compare the cards from the first deck to the cards from the second deck. The player, who has the bigger card, takes both cards and puts them at the back of his hand - the second player’s card is last, and the first person’s card (the winning one) is before it (second to last) and the player with the smaller card must remove the card from his deck. If both players’ cards have the same values - no one wins, and the two cards must be removed from the decks. The game is over, when one of the decks is left without any cards. You have to print the winner on the console and the sum of the left cards: "Player {one/two} wins! Sum: {sum}".
Examples
Input |
Output |
20 30 40 50 10 20 30 40 |
First player wins! Sum: 240 |
10 20 30 40 50 50 40 30 30 10 |
Second player wins! Sum: 50 |
Thanks!
Благодаря ви,но не схващам логиката да се проверява всеки път по 0 индекс?И друго-как да съм сигурен,че винаги ще ми се подават в еднаква дължина,за да въртя само един for цикъл и защо в while да е §§ след като трябва да свърши при зануляване на едно от двете тестета?Не си го обеснявам за мене си,затова питам...
Няма проблем за това е форума.
while (firstPlayer.Count > 0 && secondPlayer.Count > 0)
С това условие в началото на всяка итерация проверява дали и двата листа съдържат карти. При всички положения освен в една крайност се получава така че почти винаги има разлика в дължините на листовете и while цикъла ще си върти докато на единия играч не му свършат картите затова няма много значение от началните дължини. Проверяваме с нулев индекс защото сравняваме само "първите" карти. След като премахнем или преместим сравнените карти картите от 1 индекс отиват на 0 и в следващата итерация на while-a ги проверяваме тях.
Здравей, колегата ти е прав, че в този случай не са ти нужни for цикли, защото при всяко влизане в цикъла ти сравняваш нулевите елементи на двата листа и после ги махаш във всяко едно от условията и така при всяко влизане следващите елементи за сравнение са станали нулеви.Направи си проверките от типа:
if (firstPlayer[0] > secondPlayer[0])
{
firstPlayer.Add(Player1[0]);
firstPlayer.Add(Player2[0]);
firstPlayer.RemoveAt(0);
secondPlayer.RemoveAt(0);
}