在java

时间:2016-11-03 05:57:32

标签: java

我是一名新的java程序员,我正在尝试编写一个程序,通过在此类中实现roots()方法来找到二次方程的根。

我想我已经弄清楚如何实现这个等式,但是return语句说:Error-Type mismatch:无法从double转换为Set

我该如何修复此错误?

谢谢!

 package warmup;

import java.util.Set;

 public class Quadratic {

/**
 * Find the integer roots of a quadratic equation, ax^2 + bx + c = 0.
 * @param a coefficient of x^2
 * @param b coefficient of x
 * @param c constant term.  Requires that a, b, and c are not ALL zero.
 * @return all integers x such that ax^2 + bx + c = 0.
 */
public static Set<Integer> roots(int a, int b, int c) {

    //my code so far
    double q = -b + (Math.sqrt(Math.pow(b, 2)-4*a*c)/2*a);  
    return q;
}


/**
 * Main function of program.
 * @param args command-line arguments
 */
public static void main(String[] args) {
    System.out.println("For the equation x^2 - 4x + 3 = 0, the possible solutions are:");
    Set<Integer> result = roots(1, -4, 3);
    System.out.println(result);
  }


}

6 个答案:

答案 0 :(得分:2)

以下代码包含对问题中代码的一些修复,请参阅代码中的注释以获得进一步说明:

public static Set<Double> roots(int a, int b, int c) {
    Double x = Math.sqrt(Math.pow(b, 2) - 4 * a * c);
    Set<Double> result = new HashSet<>(); // return a set that contains the results
    result.add((-b + x)/ 2 * a); // -b should be divided by 2a as well
    result.add((-b - x)/ 2 * a); // -b should be divided by 2a as well
    return result;
}

public static void main(String[] args) {
    System.out.println("For the equation x^2 - 4x + 3 = 0, the possible solutions are:");
    Set<Double> result = roots(1, -4, 3); // the returned type is Set<Double> not Set<Integer> 
    System.out.println(result);
}

<强>输出

For the equation x^2 - 4x + 3 = 0, the possible solutions are:
[1.0, 3.0]

答案 1 :(得分:1)

您的方法的返回类型为Set<Integer>。返回Set意味着您可以返回零个,一个或多个元素。这是合适的,因为二次方程在一般情况下具有多个根。

<Integer>意味着你要返回的集合的元素必须是整数,这很奇怪,因为二次方程的根通常是实数,有时是复数。我猜你真正想要的是Set<Double>

如果您确实想要返回单个元素,则需要返回一个已添加相关根的集合。调用Collections.singleton()是一种方便的方法。

值得一读:

https://docs.oracle.com/javase/6/docs/api/java/util/Set.html

https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#singleton(T)

答案 2 :(得分:0)

为什么使用Set<Integer>作为返回类型,而是使用Double。 将Set<Integer>替换为Double,问题就解决了。

注意: - 您尝试返回double,但您的方法返回类型为Set ....

答案 3 :(得分:0)

public class Quadratic  {

public static double roots(int a, int b, int c) {

    //my code so far
    double q = -b + (Math.sqrt(Math.pow(b, 2)-4*a*c)/2*a);  
    return q;
}
public static void main(String[] args) {
    System.out.println("For the equation x^2 - 4x + 3 = 0, the possible solutions are:");
    double result = roots(1, -4, 3);
    System.out.println(result);
  }

}

答案 4 :(得分:0)

您在 roots 函数中返回双变量而不是Set对象。因此类型不匹配。将其修改为:

public static double roots(int a, int b, int c) {

double q = -b + (Math.sqrt(Math.pow(b, 2)-4*a*c)/2*a);  
return q;
}

确保将此函数的结果也作为double获取。 改变这个:

 Set<Integer> result = roots(1, -4, 3);

为:

double result = roots(1, -4, 3);

这应该有用。

答案 5 :(得分:0)

    import java.util.Set;
   import java.util.HashSet;

     public class Quadratic {

/**
 * Find the integer roots of a quadratic equation, ax^2 + bx + c = 0.
 * @param a coefficient of x^2
 * @param b coefficient of x
 * @param c constant term.  Requires that a, b, and c are not ALL zero.
 * @return all integers x such that ax^2 + bx + c = 0.
 */
    public static Set<Double> roots(int a, int b, int c) {
    Set<Double> result=new HashSet<>();
    //my code so far
     double p = (-b - (Math.sqrt(Math.pow(b, 2)-4*a*c)))/2*a;  
    result.add(p);
    double q = (-b + (Math.sqrt(Math.pow(b, 2)-4*a*c)))/2*a;  
    result.add(q);
    return result;
}


/**
 * Main function of program.
 * @param args command-line arguments
 */
public static void main(String[] args) {
    System.out.println("For the equation x^2 - 4x + 3 = 0, the possible solutions are:");
    Set<Double> result = roots(1, -4, 3);
    System.out.println(result);
  }


}