我是一名新的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);
}
}
答案 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);
}
}