циклы и, вероятно,

#java

#java

Вопрос:

я должен заставить компьютер вычислить все возможные способы, которыми можно бросить три кубика: 1 1 1, 1 1 2, 1 1 3, и т.д. Сложите каждую из этих возможностей и посмотрите, сколько в результате даст девять, а сколько — десять.

     public class prog209b
{
public static void main(String []args){

    int sum = 0;
    int count = 0;
    do{
        for(int i = 1; i<=6; i  ){
            count  =1;
            for(int y=1; y<=6; y  ){
                count  = 1;
                for(int x=1; x<=6; x   ){

                    sum = i   y   x;

            }
        }

    }

  }while (sum == 10 amp;amp; count == 27);{
      System.out.println("There are "  count  " ways to get ten");

}
}
}
 

Вот что я придумал, но я могу заставить его работать правильно вообще. вместо того, чтобы дать мне 27 способов, это дает мне 42. Очевидно, я делаю это неправильно. Пожалуйста, помогите мне, прежде чем у меня возникнет аневризма

Комментарии:

1. Какова цель do/while цикла? Почему у вас есть блок после цикла? Почему вы тестируете только sum в конце? Почему вы увеличиваете count на каждой итерации как внешнего, так и среднего циклов?

2. Это может показаться придирчивым, но на самом деле вы не задаете вопрос. Хотя большинство людей здесь могут предположить, каким может быть ваш вопрос, я просто хотел бы отметить, что иногда … придумать правильный вопрос — это половина ответа!

3. @admjwt: И в свете того, что люди портят ответ (и чтобы дать вам дополнительную работу …), существует рекурсивная версия. Это может быть логически более чистым и более легко расширяемым для количества используемых кубиков. Хотите попробовать его найти? По крайней мере, будет интересно найти условия завершения.

4. @admjwt — Или, может быть, найдите фактическую формулу оценки (вместо вычисления всех возможностей) — общее количество (всех) возможностей равно sidesOnDie ^ numberOfDice .

Ответ №1:

Я не собираюсь делать за вас домашнее задание, но:

  • Вам не нужен цикл do / while — зачем вам продолжать работу, если вы нашли все возможности?
  • Вам не нужно подсчитывать все возможные броски кубиков — вам нужно подсчитать, сколько всего дает 9, а сколько дает 10. Вы могли бы либо сделать это с помощью двух переменных, либо создать метод, который принимает «цель» в качестве параметра
  • Вам не нужно sum ничего другого, кроме как прямо в самом внутреннем цикле — все, что вам нужно сделать, это выяснить, равна ли сумма значений одному из ваших целевых значений, и увеличить соответствующий счетчик…

Комментарии:

1. Итак, ваше высказывание помещает оператор if после суммы и отображает его, когда оно равно 10? потому что я тоже это сделал, и вместо того, чтобы просто выводить его один раз, он делал это 25 раз и до сих пор не дал мне правильное количество раз

2. @admjwt: Нет — я говорю, что если оно равно 10, вы должны увеличить счетчик, который представляет, «сколько бросков складывается до 10». Вы хотите напечатать результат только в конце, верно?

3. Я не понимаю, что вы подразумеваете под «увеличением счетчика»

4. @admjwt: у вас должна быть переменная счетчика, которая отслеживает, сколько комбинаций вы видели, добавляя до 9, и другая переменная счетчика, отслеживающая, сколько комбинаций вы видели, добавляя до 10. Когда вы складываете кости и они равны 10, увеличьте («добавьте единицу к») счетчик, представляющий 10. Честно говоря, если этого недостаточно, я бы посоветовал вам попытаться получить дополнительную помощь в вашей школе — переполнение стека отлично подходит для многих вещей, но, похоже, на данный момент вам не помешало бы личное очное обучение.

5. я бы хотел провести время лицом к лицу, но это онлайн-класс, и мне в значительной степени нужно разобраться во всем самостоятельно. Я до сих пор не знаю, как бы я реализовал счетчик, чтобы он насчитывал только до девяти. Ну, в любом случае, спасибо, я думаю

Ответ №2:

Ваши count = 1 s находятся не в том месте, и ваш while (sum == 10 amp;amp; count == 27) не имеет смысла.

Комментарии:

1. если вы не могли сказать, я действительно не уверен, что я здесь делаю

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

Ответ №3:

 int nine = 0
int ten = 0;
for(int i = 1; i<=6; i  ){
   for(int y=1; y<=6; y  ){
       for(int x=1; x<=6; x   ){
          sum = i   y   x;
          if (sum == 9) nine  ;
          if (sum == 10) ten  ;
       }
   }
}
 

Комментарии:

1. Из описания тега для домашнего задания: домашнее задание означает, что спрашивающий запрашивает помощь со школьным домашним заданием. Это позволяет потенциальным респондентам знать, что они должны направлять учащегося в решении проблемы, а не просто показывать полный ответ.

Ответ №4:

Вы должны сделать что-то вроде этого:

 for(int i = 1; i<=6; i  ){
    for(int y=1; y<=6; y  ){
        for(int x=1; x<=6; x   ){
             sum = i   y   x;
             if (sum == 10)
                 count  ;
         }
    }
}
System.out.println("There are "   count   " ways to make 10");
 

Комментарии:

1. Я не думаю, что прямое представление кода без объяснения причин на самом деле поможет OP многому научиться.

2. @Jon Skeet на самом деле его код действительно помог мне понять, что вы имели в виду, увеличивая количество. Хотя да, это обман, теперь я действительно знаю, как это сделать. я все еще новичок в этом Java-материале. Я не понимал, что именно так вы могли бы создать счетчик для такого рода проблем. единственный способ подсчета, о котором я мог подумать, — это просто добавлять 1 при каждом запуске. я подумал, что когда он дойдет до десяти с помощью этого оператора while, он будет выводить только то, сколько раз он выполнялся. очевидно, что это не сработало.

3. @admjwt: Я все еще думаю, что было бы лучше с объяснением и без просто предоставления вам кода … заставляя вас обдумывать это вместо этого.