Логическая ошибка

168
23 февраля 2018, 17:51

Решаю задачу на Java:

Должно отобразиться окно со строкой ввода, где пишу рандомное число Х, после чего отображается результат: "X такой-то, Y такой-то" (если X - положительный, то Y будет 720, если отрицательный, то 0, 084). А вот если ввести X=0, то ничего не происходит. При этом Eclipse ошибок не выдает.

Подскажите, пожалуйста, где я накосячил в коде или что я пропустил?

package New;
import static java.lang.Math.*;
import javax.swing.*;
class Urav {
    double a, b, c;
    Urav(double a1, double b1, double c1) {
        a = a1;
        b = b1;
        c = c1;
    }
    public double ur1() {
        return sin(pow(a, 2) + pow(cos(b), 2) * b) / 2 * c * sqrt(sin(a * b));
    }
    public double ur2(int i, double x) {
        return 2 * i - x * (pow(i, 2));
    }
    public double ur3(int n) {
        return pow(n, 3) / pow(n, 2) + 1;
    }
}
public class fqrs1 {
    public static void main(String[] args) {
        String x2 = JOptionPane.showInputDialog("Введіть значення Х");
        if (x2.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Х не задано");
            return;
        }
        double x = Double.parseDouble(x2);
        Urav y = new Urav(0.245, 0.0498, 14);
        double y1;
        if (x < 0) {
            y1 = y.ur1();
        } else if (x > 0) {
            int n = 1;
            y1 = 1;
            while (n <= 5) {
                y1 *= y.ur3(n);
                n++;
            }
        }
        else {
            y1 = 0;
            for (int i = 3; i <= 6; i += 0.5) {
                y1 += y.ur2(i, x);
            }
        }
        JOptionPane.showMessageDialog(null, "x = " + x + "\n" + "y= " + y1);
    }
}
Answer 1

Вот здесь у вас ошибка:

else {
    y1 = 0;
    for (int i = 3; i <= 6; i += 0.5) {
        y1 += y.ur2(i, x);
    }
}

i имеет тип int, а вы изменяете его, прибавляя 0.5 - не целочисленное значение. При прибавлении к целому типу 0.5 оказывается нулём UPD (из комментария @etki). складывается с i с приведением к double, а затем значение приводится к int, и в итоге у вас в цикле i не изменяется вообще.

for (int i = 3; i <= 6; i += 0.5)

Интересный факт, такой код по логике не должен компилироваться:

for (int i = 3; i <= 6; i += 0.5) - скомпилируется
for (int i = 3; i <= 6; i = i + 0.5) - не скомпилируется

Это происходит из-за особенности приведения типов в операторе +=, подробнее можно прочесть в этом вопросе и ответах на него

READ ALSO
GlassFish не видит Java

GlassFish не видит Java

При попытке запуска GlassFish выдает ошибку

214
Бесконечный ListView

Бесконечный ListView

Добрый деньСкажите пожалуйста как можно организовать список который при нажатии по элементу списка формировал такой же список только с другими...

169
Запуск java-кода

Запуск java-кода

Есть небольшая проблемка с программой IntelliJ IDEA - не могу выполнить java-кодСделал как надо - во вкладке Bulid рядом сделал билд проекта, а кнопка...

146
динамическое добавление полей javafx

динамическое добавление полей javafx

есть форма (javafx без fxml, GridPane с -мя колонками: лэйбл и поля для ввода)Необходимо реализовать добавление полей (например добавить несколько дат)

169