1

Решаю задачу на 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);
    }
}
Kromster
  • 13,809
Tork
  • 27
  • 1
    Логично, ведь вы рассматриваете только 2 условия в коде: if (x < 0) и else if (x > 0), что будет при нуле - вы не написали – Denis Feb 22 '18 at 11:17
  • @Denis, там есть блок else внизу. – iksuy Feb 22 '18 at 11:21

1 Answers1

3

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

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) - не скомпилируется

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

iksuy
  • 10,475