2015-10-20 4 views
-1

Примечание: Это было решено. Я опубликовал рабочий код ниже в более позднем сообщении.Pick 4 Cards Домашнее задание

Во-первых, я знаю, что здесь есть аналогичный вопрос: Pick four cards and compute their sum JAVA Однако исход их сценария отличается от того, что мне нужно, они просто вычисляют 4 случайных карты. Мне нужно найти КАЖДУЮ комбинацию из 4-х карт, которые существуют.

В настоящее время я нахожусь в своем первом классе программирования Java. Мы рассмотрели методы и массивы, но пока ничего не говорили о классах и объектах. Поэтому имейте это в виду, если вы решите ответить.

Моя домашняя работа на этой неделе - написать программу, которая найдет все возможные комбинации из 4-х карт в колоде 52, что составляет до 24. (с Ace 1, Jack 11, Queen 12 и King 13) У меня есть отправил мой код ниже, который, как я знаю, имеет некоторые ошибки, он не работает правильно, как я этого хочу. Я размещаю здесь, чтобы узнать, правильно ли я нахожусь. Мой инструктор говорит, что правильный ответ - 12 517, и нам решать этот ответ. Любые подсказки будут высоко оценены.

Конкретная Вопрос по запросу - «Как я могу изменить свой код, приведенный ниже, который будет производить вывод 12,517»

Вещи, которые я знаю:

  1. Я знаю, что некоторые цифры отсутствуют в итераций, четвертый стек сбрасывается обратно до 4 вместо перехода на 1. Я еще не понял, как исправить это.

  2. Я знаю, что мой самый глубокий цикл цикла будет цикл той же комбинации 4 раза, прежде чем продолжить ... У меня нет идеи, почему (или как) это делает это.

NOTE !: У меня есть выходные сообщения в методе «рассчитать» для отладки. Если вы хотите их использовать, начните сразу же прекратить выполнение скрипта, что даст вам представление. Если вы хотите, чтобы программа выполнялась до завершения, прокомментируйте 3 выходных сообщения во вложенном цикле 4.

public static void main(String[] args) { 
     int[] deck = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; 
     int total; 


     total = calculate(deck); 
     output(total); 


    } 





    public static int calculate(int[] deck){ 

     int total = 0; 
     int stack1, stack2, stack3, stack4, accumulate; 



     for (stack1 = 0; stack1 < 52; stack1++){ 
      for (stack2 = 1; stack2 < 52; stack2++){ 
       for (stack3 = 2; stack3 < 52; stack3++){ 
        for (stack4 = 3; stack4 < 52; stack4++){ 
         accumulate = (deck[stack1] + deck[stack2] + deck[stack3] + deck[stack4]); 
         System.out.println(deck[stack1] + " + " + deck[stack2] + " + " + deck[stack3] + " + " + deck[stack4]); 
         if (accumulate == 24){ 
          System.out.println(deck[stack1] + " + " + deck[stack2] + " + " + deck[stack3] + " + " + deck[stack4]); 
          total++; 
          System.out.println("Accumulate is at " + accumulate); 
          System.out.println("Currently at " + total); 
         } 


        } 
       } 
      } 
     } 





     return total; 
    } 

    public static void output(int total){ 
     System.out.println ("The total number of card combinations of 4 that \n" 
       + "equal 24 is: " + total); 





    } 



} 
+1

Я голосую, чтобы закрыть этот вопрос не по теме, потому что просят комментарии на ваш код не является подходящим вопросом для SO –

+0

Soooooo ... просить помощи с кодом не разрешено? Разве этот * целый форум * не предназначен для помощи людям с их кодированием? –

+0

есть раздел справки выше, он расскажет вам, какие у вас хорошие вопросы: –

ответ

0

Я хотел бы сделать это так:

public static void main(String[] args) { 
    int counter = 0; //can also just say int counter; ==> auto intialize to 0 
    int d, c, h, s; //diamond, club, heart, spade 
    for(d = 1; d < 14; d++) //each suit starts at Ace, or the value of 1 
     for(c = 1; c < 14; c++) //each suit ends at 13, or King 
      for(h = 1; h < 14; h++) 
       for(s = 1; s < 14; s++) 
        if(d + c + h + s == 24) 
         counter++; 
    System.out.println(counter); //Your total should be your instructor's 12,517 
} 

Если я могу уточнить ваш вопрос: Вы имеете в виду, чтобы попросить каждого «комбинации» карт (так распечатав все 12,517 возможности) ,

Скорее, вы хотите получить общее количество комбинаций, представленных счетчиком.

То, что делают мои четыре цикла, очень просто: он использует все возможности, используя Ace как 1 и King как 13. Если сумма четырех карт равна (==) 24, затем добавьте один к счетчику ,

Это будет работать из-за природы вложенных циклов, проходящих через все четыре набора комбинаторов 13C1.

Я надеюсь, что это помогло!

ПРИМЕЧАНИЕ. Если вы не знали: на языках с скобками (Java, C), если вы используете условный оператор или цикл (if/else, while, for) только с одним следующим выражением, как в моем коде, вы можете опустить скобки.

+0

Спасибо за ответ. Однако этот код был близок к моей первой попытке. Запуск этого кода получает в общей сложности 1 291 комбинацию. На прошлой неделе я отправил свою первую попытку моему инструктору, и он ответил сегодня, что 1,291 ошибался и мне нужно было получить 12 517 –

0

Вот рабочий код, который дает правильный результат.Ключ в том, чтобы родитель ребенка укладывают на родительский стек + 1:

public static void main(String[] args) { 
     int[] deck = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; 

     int total; 

     total = calculate(deck); 
     output(total); 

    } 

    public static int calculate(int[] deck){ 

     int total = 0; 
     int stack1, stack2, stack3, stack4, accumulate; 


     for (stack1 = 0; stack1 < 52; stack1++){ 
      for (stack2 = (stack1 + 1); stack2 < 52; stack2++){ 
       for (stack3 = (stack2 + 1); stack3 < 52; stack3++){ 
        for (stack4 = (stack3 + 1); stack4 < 52; stack4++){ 
         accumulate = (deck[stack1] + deck[stack2] + deck[stack3] + deck[stack4]); 

         if (accumulate == 24) 
          total++; 

        } 
       } 
      } 

     }  

     return total; 
    } 




    public static void output(int total){ 
     System.out.println ("The total number of card combinations of 4 that \n" 
       + "equal 24 is: " + total); 

    } 


} 
+0

. Одно улучшение - если сумма превышает 24 в любом из этих циклов, вы также можете выйти из этой петли , Например, если stack1, stack2 и stack3 имеют значение 24, вы можете даже не войти в цикл stack4. Кроме того, я не думаю, что каждый конец петли в точке 52 является точным. –

+0

Ya, я подумал об этом, и если бы это была программа, которую я писал для работы, я бы, вероятно, это сделал, но для домашней работы это, похоже, делает эту работу. Что касается окончания в 52, он на самом деле заканчивается на 51 (52 карты в массиве, которые существа с 0). Я мог бы сказать <= 51, что может быть более точным. –

+0

Я имею в виду, что если все петли заканчиваются на 51, тогда вы будете генерировать «комбинацию», которая имеет карточку 51 четыре раза. Это ошибка, но, похоже, это не повредит вам, так как последние 4 карты в колоде всегда суммируются более чем на 24 и, таким образом, будут отброшены. –

Смежные вопросы