#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: Я все еще думаю, что было бы лучше с объяснением и без просто предоставления вам кода … заставляя вас обдумывать это вместо этого.