java - 初学者在 Java 中编写完成正方形时遇到困难

标签 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

最佳答案

因此,完成平方通常用于寻找二次方程的 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 = 1(将 a,b,c 除以 a) 此步骤之所以有效,是因为 ax^2 + bx + c = 0 相当于 x^2 + (b/a)x + c/a = 0

第 2 步:将归一化的 c 移动到方程的另一边。 x^2 + bx = -c

第三步:等式两边加上(b/2)^2 x^2 + bx + (b/2)^2 = -c + (b/2)^2

第四步:重写左侧(作为正方形) (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)));
  }
}

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

关于java - 初学者在 Java 中编写完成正方形时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339373/

相关文章:

JavaFX 调用目标异常

java - php相当于jython?

java - Arrays.asList().contains() 与多个 if equals 指令的性能比较

iphone - CGFloat的乘除法和精度损失

java - 如何将包含在 if-then-else 中的 boolean 文字简化为单个调用以符合 sonarqube。谢谢

java - 内存不足错误,java堆空间

math - 模倒数和无符号整数

Javascript - 奇怪的数学输出

java - Java.Math.Random().保持不变

math - 使用模数会偏向高数吗?