Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Neli_Kostadinova avatar Neli_Kostadinova 2 Точки

6. Cards Game от Exercise: Lists / Arrays Advanced - Java

Здравейте

Имам проблем с една задача. Условието на задачата е:

6. Cards Game

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 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 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


Mоето решение

Съдията ми дава:

75 / 100 Памет: 1.11 MB
Време: 0.918 s

Тест №3 (Недостатъчно време)

Използвано време: 0.918 s

Използвана памет: 0.90 MB


Ако правилно съм разбрала отговора е верен но не се включва във времето. Ще бъда благодарна ако някой погледне кода и ми каже къде е проблема.

Благодаря

Тагове:
0
Fundamentals Module
PetarIliev1 avatar PetarIliev1 73 Точки

Твоето решение поправено ---> https://pastebin.com/6gJ49usC

Като цяло правиш прекалено много проверки , не е лошо нещата да са изнесени в методи но ти преди да изполваш метода правиш проверка във метода правиш още две проверки при самото извикване на метода правиш една  : (playerOne.get(0)==playerTwo.get(0)  )

И взимаш картите чрез get(0) при положение ,че при абсолютно всеки сценарии ти ще трябва да махнеш първата карта от колекцията. Това, което промених е да пазя картите във две променли :

int firstPlayerCard=playerOne.remove(0);
int secondPlayerCard=playerTwo.remove(0);

Ако firstPlayerCard>secondPlayerCard          -> playerOne.add(firstPlayerCard); , playerOne.add(secondPlayerCard);

И същата логика и за playerTwo , няма смисъл от else firstPlayerCard==secondPlayerCard те вече са премахнати при взимането им.

0
Neli_Kostadinova avatar Neli_Kostadinova 2 Точки

Здравей

Оказа се че при извикване на метода compareCards() съдията показва, че в този вариант:

<span style="font-size:12px">else if (playerOne.get(0)==playerTwo.get(0))  // same values
    compareCards(playerOne, playerTwo, playerOne.get(0)==playerTwo.get(0));</span>

отнема по малко памет отколкото в този вариант:

else if (playerOne.get(0)==playerTwo.get(0))  // same values
    compareCards(playerOne, playerTwo, true);

затова са многото проверки.

А най-добрият вариант е:

else  // same values
    compareCards(playerOne, playerTwo, true);

 

А всъщност главната причина за неработещия код е "==".  След като го замених с .equals() кода заработи.

Предполарам, че референтен тип данни се сравняват само с .equals(), а примитивен с "==".

Поздрави

0
23/06/2019 21:20:15
replicant avatar replicant 0 Точки

Благодаря за разяснението!

Оказва се, че е точно така.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.