Что я делаю не так y = 4x ^ 2 + 5x -3, x должен начинаться с 0,1 и заканчиваться на 1,0 с шагом + 0,1 - PullRequest
0 голосов
/ 09 июля 2019

Мне нужно иметь x go + с шагом 0,1, пока не достигнет 1,0.

Для каждого шага мне нужен вывод для функции y=4x^2 + 5x -3

Вывод, который дает мне Javaэто не то, что я ожидаю.

Я попробовал цикл while.Я должен отметить, что я совершенно новый новичок.

public class Main {
    public static void main(String[] args)
    {
        double x = 0.1;
        double x2 = Math.pow(x,2);
        double y = 4*x2 + 5*x - 3;
        double counter = 0.1;

        while(counter <= 1.0)
        {
            System.out.print(y);
            counter =+ 0.1;
            x =+ 0.1;             
        }
    }
}

Вывод просто длинный 2.46-2.46-2.46-2.46-....-...-2.46

Ответы [ 5 ]

2 голосов
/ 09 июля 2019

Это потому, что вы не обновляете y при изменении x. Вы определяете y как:

double y = 4*x2 + 5*x - 3;

В начале, но вам нужно обновить его по мере постепенного изменения x. Вы можете сделать:

while(counter <= 1.0)
{
    y = 4*x*x + 5*x - 3;
    System.out.print(y);
    counter += 0.1;
    x += 0.1;             
}

Но вот прекрасная вещь: вы можете использовать x в качестве счетчика, чтобы сделать ваш код проще:

while(x <= 1.0)
{
    y = 4*x*x + 5*x - 3;
    System.out.print(y);
    x += 0.1;             
}

Есть и другие способы упростить этот код, и я призываю вас поиграть с ним и попытаться выяснить, как его улучшить!

1 голос
/ 09 июля 2019

Добро пожаловать в мир кодирования! Когда вы запускаете цикл, код внутри него будет выполняться несколько раз. Хотя интуитивно понятно, что определение y как функции x означает y обновления, когда x делает, к сожалению, это не так. Чтобы обновить значение, вы должны переоценивать его каждый раз при прохождении цикла.

public static void main(String[] args) {
    double x = 0.1;
    double x2 = Math.pow(x,2);


    double y = 4*x2 + 5*x - 3;
    double counter = 0.1;

    while(counter <= 1.0)
    {
        System.out.print(y);

        counter += 0.1;

        //re-evaluate x, x2, and y here
        x += 0.1;
        x2 = Math.pow(x,2);
        y = 4*x2 + 5*x - 3;
    }
}

Это работает, но мы можем сделать лучше. Если вы хотите попробовать динамически обновлять y относительно x, попробуйте написать функцию:

double calculateY(double x) {
  double value = 4*(x*x) + 5*x - 3;
  return value;
}

В вашем цикле вы бы вызвали функцию следующим образом:

y = calculateY(x);

Функции - очень хороший способ быстро и легко выполнять сложные наборы кода. В качестве бонуса, если вы хотите вычислить y где-то еще в вашем коде, вам не нужно копировать-вставлять из вашего цикла. Это хорошая практика, потому что если вам позже понадобится изменить уравнение, вам нужно изменить его только один раз, в функции, а не в нескольких местах, где вы можете ошибаться.

Вот как может выглядеть измененный код. Обратите внимание, что я начинаю переменные с 0 - это может помочь избежать путаницы.

double calculateY(double x) {
  double value = 4*(x*x) + 5*x - 3;
  return value;
}

public static void main(String[] args) {
  double x = 0;
  double y = 0;

  while (x <= 1.0) {
    x += 0.1;
    y = calculateY(x);
    System.out.print(y);
  }
}

Намного меньше беспорядка! Этот код легко читается и легче редактируется. Если вы хотите вычислить y другим способом, вам нужно всего лишь изменить функцию calculateY - с дополнительным преимуществом, которое вам не нужно пересчитывать или даже включать в переменные x2 или counter.

0 голосов
/ 09 июля 2019

Проблема в том, что вы не пересчитываете y после обновления x. Вот пример, который может работать:


public class Main {

    double calcY(double x) {
        double x2 = Math.pow(x,2);
        double y = 4*x2 + 5*x - 3;
        return y;
    }

    public static void main(String[] args)
    {
        double x = 0.1;
        double counter = 0.1;

        while(counter <= 1.0)
        {
            double y = calcY(x);
            System.out.print(y);
            counter += 0.1;
            x += 0.1;             
        }
    }
}
0 голосов
/ 09 июля 2019
    public static void main(String[] args)
    {
        double x = 0.1;
        double x2 = Math.pow(x,2);
        double y;
        double counter = 0.1;

        while(counter <= 1.0)
        {
            y = 4*x2 + 5*x - 3;
            System.out.print(y);
            counter =+ 0.1;
            x =+ 0.1;             
        }
    }
}

Вам необходимо пересчитать значение y.

0 голосов
/ 09 июля 2019

Нужен расчет в каждом цикле.

double getY(double x){
...
}

while(counter <= 1.0)
    {
        System.out.print(getY(x));
        counter += 0.1;
        x += 0.1;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...