/**
* Точка входа в нашу программу. Главная функция, которая исполняется (вызывается) при запуске программы.
*
* Все, что внутри фигурных ('{}') скобок после названия функции ('найтиКомбинацииШаров')
* выполняется в рамках этой функции.
*/
void найтиКомбинацииШаров() { // Здесь после названия функции 'найтиКомбинацииШаров'
// "открываются" фигурные скобки ({) и здесь начало функции 'найтиКомбинацииШаров'
// Здесь массив (список) шаров записывается в переменную 'массивШаров1'
int[] массивШаров1 = {
1,
3,
5,
7,
6,
11,
13,
15,
};
// При объявлении переменной перед ее названием указывается тип этой переменной (тут это 'int[]'),
// который говорит о том, какие данные хранятся в этой переменной.
//
// В данном случае ('int[]') - значит что в переменную записан массив ('[]') целых чисел ('int').
// Т.е. тип данных 'int' - это значит что внутри целое число, символы [] указывают на то, что это массив.
// (Бывают еще, например, дробные числа (1.42), строки (текст) и другие типы данных).
//
// К примеру, числа можно делить, умножать, складывать, вычитать и т.д., а вот со строками так делать нельзя,
// поэтому для них отдельный тип данных
// Здесь вызывается функция 'найтиКомбинациюШаровДляСуммы',
// в которую передаются наш массив шаров (который записан в переменной 'массивШаров1') и требуемая сумма (30)
// При вызове этой функции будет выполнен программный код,
// который написан ниже в рамках функции 'найтиКомбинациюШаровДляСуммы'
// См. ('void найтиКомбинациюШаровДляСуммы(int[] массивШаров, int требуемаяСумма)')
найтиКомбинациюШаровДляСуммы(массивШаров1, 30);
// Еще один набор шаров записываем в другую переменную 'массивШаров2'
int[] массивШаров2 = {
1,
3,
5,
7,
9, // 6 заменили на 9
11,
13,
15,
};
// Еще раз вызываем нашу функцию, с новым набором шаров
найтиКомбинациюШаровДляСуммы(массивШаров2, 30);
} // Здесь "закрываются" фигурные скобки функции (}) и здесь конец этой функции 'найтиКомбинацииШаров'
/**
* Функция, которая принимает на вход массив шаров, в котором все варианты шаров и требуемую сумму.
* Перебирает все возможные комбинации шаров, сравнивая сумму каждой комбинации с требуемой.
* Если сумма совпадает с требуемой, выводит совпавшую комбинацию на экран.
*/
void найтиКомбинациюШаровДляСуммы(int[] массивШаров, int требуемаяСумма) {
// Проход по массиву шаров в цикле.
// Блок программного кода, заключенный в фигурные скобки {} сразу после оператора 'for'
// будет выполняться столько раз, сколько шаров в массиве.
// При этом на каждом шаге значение текущего шара из массива шаров ('массивШаров')
// будет записано в переменную 'шар1' (с типом данных 'int' - целое число)
// и это значение будет использовано внутри тела этого цикла
for (int шар1 : массивШаров) {
// Вложенный в первый цикл, еще один такой же проход по массиву шаров в цикле.
// Для каждого шара из первого цикла, перебираются еще раз все шары внутри этого, вложенного цикла.
// Т.е. тут можно сравнить каждый шар с еще один шаром.
// Внутри этого цикла значение текущего шара будет записано в переменную 'шар2' (в первом цикле - 'шар1').
for (int шар2 : массивШаров) {
// Еще один вложенный цикл, тут значение для каждого шага будет записано в переменную 'шар3'.
for (int шар3 : массивШаров) {
// Внутри цикла 3го уровня мы уже можем сравнить все 3 варианта, т.е. все возможные комбинации:
// Вызываем функцию 'проверитьСуммуШаров', передаем в нее значения шаров и требуемой суммы.
// Функция посчитает сумму текущей комбинации и сравнит ее с требуемой.
// На основе сравнения, вернет ответ ДА/НЕТ
// и этот ответ будет записан в переменную 'совпадаетЛиСумма'
boolean совпадаетЛиСумма = проверитьСуммуШаров(шар1, шар2, шар3, требуемаяСумма);
// 'boolean' перед именем переменной -
// это значит что в такой переменной может быть записано либо ДА, либо НЕТ
// если в переменной 'совпадаетЛиСумма' записано ДА,
// вызывается функция 'вывестиСовпавшуюКомбинациюШаровНаЭкран', в нее передаются те же значения:
if (совпадаетЛиСумма) {
// Вызываем функцию, которая выводит на экран совпавшую комбинацию
вывестиСовпавшуюКомбинациюШаровНаЭкран(шар1, шар2, шар3, требуемаяСумма);
}
}
}
}
}
/**
* Функция, которая считает сумму шаров и сравнивает ее с требуемой.
* В ответ присылает ДА/НЕТ (совпадает или нет)
*/
boolean проверитьСуммуШаров(int шар1, int шар2, int шар3, int требуемаяСумма) {
// перед названием функции указывается тип возвращаемых данных. В данном случае 'boolean' - логическое ДА/НЕТ
int сумма = посчитатьСуммуШаров(шар1, шар2, шар3);
return сумма == требуемаяСумма;
}
/**
* Функция, которая складывает все шары и возвращает полученный результат
*/
int посчитатьСуммуШаров(int шар1, int шар2, int шар3) {
return шар1 + шар2 + шар3;
}
/**
* Функция, которая выводит совпавший результат на экран
*/
void вывестиСовпавшуюКомбинациюШаровНаЭкран(int шар1, int шар2, int шар3, int требуемаяСумма) {
// Формируем текст для вывода на экран и записываем в переменную 'текстДляВыводаНаЭкран'.
// 'String.format(...)' - вызов системной функции,
// которая формирует текст на основе шаблона-формата ("%d + %d + %d = %d") и переменных,
// которые нужно вставить в этот формат ('шар1', 'шар2', 'шар3', 'требуемаяСумма').
// Вместо %d будут подставляться переданные значения по порядку: 'шар1', 'шар2', 'шар3', 'требуемаяСумма'.
// В итоге получится: "11 + 13 + 6 = 30"
String &#
1090;&#
1077;&#
1082;&#
1089;&#
1090;&#
1044;&#
1083;&#
1103;&#
1042;&#
1099;&#
1074;&#
1086;&#
1076;&#
1072;&#
1053;&#
1072;&#
1069;&#
1082;&#
1088;&#
1072;&#
1085; = String.
format(
"%d + %d + %d = %d",
шар1,
шар2,
шар3,
требуемаяСумма
);
// 'String' перед именем переменной 'текстДляВыводаНаЭкран' - значит что эта переменная внутри себя хранит текст
System.
out.
println(&#
1090;&#
1077;&#
1082;&#
1089;&#
1090;&#
1044;&#
1083;&#
1103;&#
1042;&#
1099;&#
1074;&#
1086;&#
1076;&#
1072;&#
1053;&#
1072;&#
1069;&#
1082;&#
1088;&#
1072;&#
1085;); // Вызов системной функции, которая выводит на экран переданный текст
}