Просто для начала, у меня это работает, используя для циклов.Я не могу использовать для петель однако.Это должны быть вложенные циклы while.
Поскольку моя программа работает нормально, используя цикл for, должна быть проблема с моей вложенной логикой while.Каждый раз, когда запускается приведенный ниже код, я просто возвращаюсь с 0 для closestEstimate (моя начальная точка closestEstimate).Этого не происходит, и я получаю правильную долю процента с помощью цикла for.Так что есть проблема с моей вложенной логикой цикла while где-то.
Ниже приведены инструкции:
"Теперь рассмотрим формулу де Ягера waxbyczd, где каждый из a, b, c и dявляется одним из 17 чисел {-5, -4, -3, -2, -1, -1/2, -1/3, -1/4, 0, 1/4, 1/3, 1/2, 1, 2, 3, 4, 5}. «Теория обаяния» утверждает, что формула де Ягера с вашими четырьмя личными числами может быть использована для аппроксимации μ с долей относительной погрешности в 1%. Например, предположим, что вы выбралиПриблизительное среднее расстояние от Земли до Луны в милях: μ = 238 900. И предположим, что вы фанат спорта ОГУ, поэтому ваши личные номера - это количество побед в последнем сезоне национального чемпионата ОГУ (14; также рекорд для побед вгод со стороны любой команды колледжа), вместимость стадиона Огайо (102 329), год четырех золотых медалей Джесси Оуэнса в Берлине (1936) и ваш номер в футболке, когда вы играли в хоккей на траве средней школы (13).значение 14-5102329119361 / 2134 составляет около 239 103, что составляетЭто около 0,08% от μ.
Ваша задача - создать Java-программу, которая спрашивает пользователя, какая константа μ должна быть аппроксимирована, а затем по очереди запрашивает каждое из четырех личных чисел w, x, y,и з.Затем программа должна рассчитать и сообщить значения показателей a, b, c и d, которые максимально приближают формулу де Ягера к μ, а также значение формулы waxbyczd и относительную ошибку приближения кс точностью до сотой доли процента. "
Любая помощь в том, где я ошибаюсь с кодом ниже, будет принята с благодарностью. Я могу опубликовать рабочую версию цикла for, если это поможет. Единственный кодне включены вызовы статических методов, которые собирают числа ниже, но так как они не являются проблемой для версии for-loop, я не включил их сюда, так как это делает код намного длиннее и менее читаемым.хотя это помогло бы.
public static void main(String[] args) {
SimpleReader in = new SimpleReader1L();
SimpleWriter out = new SimpleWriter1L();
//represents our universal physical or mathematical constant. any positive real number
out.println(
"First, let's get the double value for our mathematical constant:");
double mu = getPositiveDouble(in, out);
//represents our four personal numbers (not equal to 1) for da jager formula
out.println(
"Now we need four numbers with personal significance to you "
+ "(doubles not equal to 1.0):");
double w = getPositiveDoubleNotOne(in, out);
double x = getPositiveDoubleNotOne(in, out);
double y = getPositiveDoubleNotOne(in, out);
double z = getPositiveDoubleNotOne(in, out);
//these are the 17 numbers as exponents for second part of da jager formula
double[] charmingTheory = { -5, -4, -3, -2, -1, -1 / 2, -1 / 3, -1 / 4,
0, 1 / 4, 1 / 3, 1 / 2, 1, 2, 3, 4, 5 };
//initialize counters for our four loops
int i = 0;
int j = 0;
int k = 0;
int l = 0;
//starting estimate
double closestEstimate = 0;
while (i < charmingTheory.length) {
double num1 = Math.pow(w, charmingTheory[i]);
out.println(num1);
i++;
while (j < charmingTheory.length) {
double num2 = Math.pow(x, charmingTheory[j]);
j++;
while (k < charmingTheory.length) {
double num3 = Math.pow(y, charmingTheory[k]);
k++;
while (l < charmingTheory.length) {
double num4 = Math.pow(z, charmingTheory[l]);
double estimate = num1 * num2 * num3 * num4;
if (Math.abs(mu - estimate) < Math
.abs(mu - closestEstimate)) {
closestEstimate = estimate;
}
l++;
}
}
}
}
out.println("Closest Estimate is:");
out.println(closestEstimate);