Професионална програма
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