编写完成Java广场的初学者难度

时间:2016-09-06 01:19:45

标签: java math

我是Java世界的初学者,我被指派编写代码来询问系数,然后完成广场。我已经花了几个小时研究如何处理无效(再次,初学者),任何帮助将不胜感激。

    import java.util.Scanner;

    // Declare class
    public class Squares
 {
        // Main method of class. Execution starts
        public static void main(String[] args)
    {
    // Declare variables
    double a, b, c;
    char x = 'x';

    // Print name
    System.out.println("Program 2 (Complete the Square) by <your name> \n");

    // Create scanner
    Scanner scan = new Scanner(System.in);

    // Print prompt for variable a
    System.out.println("Enter value for a, a=");
    // Set a to input value
    a = Double.parseDouble(scan.nextLine());

    System.out.println("Enter value for b, b=");
    b = Double.parseDouble(scan.nextLine());

    System.out.println("Enter value for c, c=");
    c = Double.parseDouble(scan.nextLine());

    System.out.println(a*Math.pow(x, 2)+b*x+c=0);
    }
 }

这是我收到的错误

    c:\cs\program2>javac Squares.java
    Squares.java:41: error: unexpected type
            System.out.println(a*Math.pow(x, 2)+b*x+c=0);
                                                   ^
      required: variable
      found:    value
      1 error

此示例给出了所需的输出

    > java Program2
    Program 2 (Complete the Square) by <your name>
    Enter a: 1
    Enter b: 2
    Enter c: 0
    01.0*x^2 + 2.0*x + 0.0 = 0
    01.0*(x + 1.0)^2 – 1.0 = 0

1 个答案:

答案 0 :(得分:2)

因此,完成正方形通常用于找到找到二次方程x截距值的方法。

假设您有三个系数a, b, c s.t. ax^2 + bx + c = 0。 您希望找到x可以采用的值,以使上述方程成立。

执行此操作的一种方法是使用二次方程,但您希望使用完整的方法。

您希望从ax^2 + bx + c = 0转到(x + m)^2 = n,并且很容易找到x = -m + sqrt(n)x = -m - sqrt(n)

在我提供任何代码之前,我会告诉您在纸上执行此操作的步骤。

对于此方法有用的任何数量(x + a)^2 = x^2 + 2ax + a^2

假设您给出:a, b, c

第1步:规范化系数,使a = 1a,b,c除以a) 此步骤有效,因为ax^2 + bx + c = 0等同于x^2 + (b/a)x + c/a = 0

步骤2:将规范化的c移动到等式的另一侧。 x^2 + bx = -c

步骤3:将(b / 2)^ 2添加到等式的两边 x^2 + bx + (b/2)^2 = -c + (b/2)^2

第4步:重写左侧(作为正方形) (x + b/2)^2 = -c + (b/2)^2

第5步:解决x x = -b/2 +/- sqrt(-c + (b/2)^2)

现在代码:如果存在任何实值截距,第一部分实际上会找到x的值。

public static void complete_square(double a, double b, double c) {
  b /= a;
  c /= a;
  c *= -1;
  c += (b/2)*(b/2);
  if (c < 0){
    System.err.println("Error: no real valued roots");
    return;
  }
  if (c == 0){
    System.out.format("X = %f", -b/2); // solution (only 1 distinct root)
    return;
  }
  System.out.format("X = %f", -b/2 + sqrt(c)); // solution 1
  System.out.format("X = %f", -b/2 - sqrt(c)); // solution 2
}

编辑:将输出更新为请求的格式,并提供更完整的代码框架。

import java.util.Scanner;
import Java.lang.Math;

public class Squares {
  public static void main(String args[]){
    // Do your header output and input to get a,b,c values

    // Print the input equation. Uses format to "pretty print" the answer
    // %s - expects a string and %c expects a character
    System.out.format("%s*x^2 %c %s*x %c %s = 0\n",
                      Double.toString(a),
                      (b < 0 ? '-' : '+'),  // ternary operator. Select '-' if b is negative and '+' if b is positive
                      Double.toString(Math.abs(b)),
                      (c < 0 ? '-' : '+'),
                      Double.toString(Math.abs(c)));
    complete_square(a, b, c);
  }

  public static void complete_square(double a, double b, double c) {
    b /= a;
    c /= a;
    a /= a;
    c -= (b/2)*(b/2);
    System.out.format("%s*(x %c %s)^2 %c %s = 0",
                      Double.toString(a),
                      (b < 0 ? '-' : '+'),
                      Double.toString(Math.abs(b/2)),
                      (c < 0 ? '-' : '+'),
                      Double.toString(Math.abs(c)));
  }
}

注意:我强烈建议您在复制和粘贴上述代码之前尝试理解此代码背后的数学原理。