2016-01-07 6 views
-3

Я пытаюсь получить кусок Java, чтобы вернуть int total значение карт в колоде. Используя тестовые данные из 10 карт разных значений, я должен получить результат 64, но я получаю случайные ответы около 73, но каждый раз, когда я его запускаю, он немного меняется. У кого-нибудь есть идеи, почему? Меня тоже путают с частью программы, поскольку я пытаюсь вернуть массив всех карт определенного костюма (в тестовом случае его сердца). Если мой код очень грязный или совершенно неправильный, потому что я просто начинающий ха-ха. Все методы и прочее уже были завершены моим лектором, и я попытался заставить кого-то показать мне правильное направление для методов.Яблочная колода карт

Заранее спасибо.

первый вопрос

public int totalPack() { 

    int total = 0; 
    for (int i = 0; i < pack.size(); i++){ 
     total = total + pack.get(i).getNumber() ; 
     } 
    return total; 
    } 

конец

второй вопрос

public ArrayList<Card> findSuit(String suit) { 

    for (int i = 0; i < pack.size(); i++){ 
     if (pack.get(i).getSuit().equals(suit)){ 
    return null; 
     } 
     else return ???; 
    } 

    return findSuit(suit); 

} 
+0

Где часть вашего кода относительно "пакет"? – TangledUpInBlue

+2

Добро пожаловать в переполнение стека! Пожалуйста, примите [тур], осмотритесь и прочитайте [помощь], в частности [* Как я могу задать хороший вопрос? *) (/ Help/how-to-ask) Спросите ** один ** вопрос на вопрос, а не два, и включить минимальную ** полную ** необходимую информацию, которая в этом случае явно включает объявление «pack» и, возможно, «класс карты». * (не мой dv) * –

+0

Получил это отсортированное спасибо в любом случае! –

ответ

1

Для первой части мы должны увидеть остальную часть вашего кода.

Что касается второй части:

Во-первых, вам необходимо изменить то, что вы вернетесь, если размер пакета равен 0, где у вас есть:

return findSuit(suit); 

Если этот случай попал, вы будет застревать в бесконечной рекурсии и получить ошибку переполнения. Вы должны были просто что-то вернуть на консоль или выбросить ошибку, так как размер пакета недействителен, ниже - лучшее решение.

Затем, чтобы решить вашу проблему, я предлагаю создать экземпляр нового ArrayList и называть его suitMatchList (или все, что вам нужно), и когда карта, которую вы ищете в пакете, соответствует нужному вам костюму, добавьте это в новый ArrayList <>, вам не нужен оператор else, и вам также нужно удалить возвращаемые значения в цикле for, поскольку он будет только петля один раз. Кажется, вы пытались справиться с этим с помощью смеси петель и рекурсии, но смутили оба. Используйте один или другой.

Затем, как только цикл for завершен, вы можете вернуть этот новый ArrayList <>.

Надеюсь, это поможет. Дайте ему уйти, и если вы все еще застряли, дайте мне знать, и я добавлю код.

EDIT:

Я добавил код, приведенный ниже, но все же дать ему попробовать первый :) я только что написал это с верхней части моей головы без IDE, так что это может по синтаксически некорректной , но я думаю, что это правильно.

public ArrayList<Card> findSuit(String suit) 
{ 
    ArrayList<Card> matchSuitList = new ArrayList<Card>(); 

    for (int i = 0; i < pack.size(); i++) 
    { 
     if (pack.get(i).getSuit().equals(suit)) 
     { 
      matchSuitList.add(pack.get(i)); 
     } 
    } 

    return matchSuitList; 
} 
+0

Спасибо за помощь! Я думал, что вам нужно создать новый массив для хранения значений, но не был на 100% уверен, как это сделать :-) Также какие части кода потребуются для первого вопроса? Или было бы проще сохранить копию в zip-файле, если это возможно? У меня разные методы в разных классах, поэтому я предполагаю, что вам нужно уметь это видеть? –

+0

EDIT: Я понял, что сделал глупую ошибку и выяснил свою проблему в q1, глупо меня, ха-ха! Спасибо за помощь Мэтту и Юрферу! –

2

Для вашего второго вопроса:

Как отмечает Jurfer, вам не нужно рекурсии.Вы должны следовать за четыре простых шага:

  • Создать новый ArrayList
  • перебрать все карты
  • Проверьте, правильно ли каждая карта нужного костюма, и если да, добавить его к ArrayList
  • Return ArrayList.

Проверьте код:

public ArrayList<Card> findSuit(String suit) { 

    // 1. Create a new ArrayList 
    ArrayList<Card> list = new ArrayList<>(); 

    // 2. Iterate over the cards 
    for (int i = 0; i < pack.size(); i++){ 
    // 3. If the card is of the desired suit 
    if (pack.get(i).getSuit().equals(suit)){ 
     // add it to the list 
     list.add(pack.get(i)); 
    } 
    // 4. Return the ArrayList 
    return list; 
    } 
Смежные вопросы