我看到其他人发布了这个问题,但没有说得对,所以他没有得到任何帮助,所以我想我会尝试更直接。
以下是向我们提出的问题:
//在名为Intersect.java的文件中编写并提交您的代码。使用IO模块读取输入。使用System.out.println()打印您的答案。
编写一个程序来计算2个方程之间的交集:
度数-2(二次)多项式,即
y = dx ^ 2 + fx + g
其中d,f和g是常数
和1度(线性)等式,即
y = mx + b
其中m是斜率,b是常数
以上只是文本,而不是可能出现在Java程序中的代码。
询问用户每个等式中的常数值。输出交叉点作为有序对(x,y)或"无"如果不存在。以下是一个示例运行。
java Intersect
输入常数d: 五 输入常量f: -3 输入常数g: 2 输入常数m: 1 输入常数b: 3
交叉路口是: (1,4) (-0.20,2.8) //
主要问题本质上是要求我们编写一个代码,要求用户输入各个常数和两个方程的斜率,一个是二次多项式,另一个是点斜率的线性方程。
我知道我们必须在代码中使用二次方程式,但我不知道如何对其进行实际编码。
一旦我们让用户输入常数,在这种情况下5(d,f,g,m,b; m是斜率)我们需要让代码运行计算以将这些常量输入到上面的例子中(y = dx ^ 2 + fx + g | y = mx + b)并返回" none"如果没有交叉点,或者它确实相交,则它与它相交的有序对(x,y)。
我已经知道如果输入0作为常量它返回(NaN,NaN),我也知道需要将其重新写入None。
到目前为止,我只有以下内容:
public class Intersect { public static void main(String [] args){
System.out.println("Enter the constant d:");
int d = IO.readInt();
System.out.println("Enter the constant f:");
int f = IO.readInt();
System.out.println("Enter the constant g:");
int g = IO.readInt();
System.out.println("Enter the constant m:");
int m = IO.readInt();
System.out.println("Enter the constant b:");
int b = IO.readInt();
如果有人能够对此有所了解,那就太棒了,谢谢!
EDIT1:
到目前为止,我已将代码更改为以下内容,但是,我仍然不知道如何让它返回给我一个答案:
public class Intersect { public static void main(String [] args){
System.out.println("Enter the constant d:");
int d = IO.readInt();
System.out.println("Enter the constant f:");
int f = IO.readInt();
System.out.println("Enter the constant g:");
int g = IO.readInt();
System.out.println("Enter the constant m:");
int m = IO.readInt();
System.out.println("Enter the constant b:");
int b = IO.readInt();
//y = dx^2 + fx + g
//y = mx + b
//mx + b = dx^2 + fx + g
//x^2 * (d) + x * ( f - m ) + ( g - b )
int A = d;
int B = f - m;
int C = g - b;
double x1 = - B + Math.sqrt( B^2 - 4 * A * C ) / (2 * A);
double x2 = - B - Math.sqrt( B^2 - 4 * A * C ) / (2 * A);
double y1 = m * x1 + b;
double y2 = m * x1 + b;
}
另外,eclipse告诉我x2,y1和y2根本没用过。 我知道我需要使用System.out.println()但是我不明白我可以把它放在那里以使答案成为有序对。此外,我尝试设置一个If语句让答案返回None而不是NaN但是它返回NaN None。
答案 0 :(得分:0)
//y = dx^2 + fx + g
//y = mx + b
//mx + b = dx^2 + fx + g
//x^2 * (d) + x * ( f - m ) + ( g - b )
A = d
B = f - m
C = g - b
x1 = - B + sqr( B^2 - 4 * A * C ) / (2 * A)
x2 = - B - sqr( B^2 - 4 * A * C ) / (2 * A)
y1 = m * x1 + b
y2 = m * x1 + b
答案 1 :(得分:0)
您需要考虑很多特殊情况 我希望我能把它们弄好。
所以在初始化值之后你可以把它放在:
// calculating some useful values.
double t = -(f - m) / (2.0 * d);
double u = t * t - (g - b) / (double) d;
// the first polynomial is linear, so both terms are.
if (d == 0) {
// both linear functions have the same slope.
if (f == m) {
// both functions are shifted the same amount along the y-Axis.
if (g == b)
// the functions lie on top of each other.
System.out.println("There is an infinite amount intersections");
// the functions are shifted different amounts along the y-Axis.
else
// the lines are parallel.
System.out.println("There are no intersections");
}
// both linear functions have different slopes.
else {
// solve linear equation.
double x = (b - g) / (double) (f - m);
double y = m * x + b;
System.out.println("The intersection is: (" + x + "," + y + ")");
}
}
// the functions do not cross each other.
else if (u < 0)
System.out.println("There are no intersections");
// the linear function is a tangent to the quadratic function.
else if (u == 0) {
// solve equation.
double x = t;
double y = m * x + b;
System.out.println("The intersection is: (" + x + "," + y + ")");
}
// the linear function intersects the quadratic function at two points.
else {
// solve quadratic equation.
double x1 = t + Math.sqrt(u);
double x2 = t - Math.sqrt(u);
double y1 = m * x1 + b;
double y2 = m * x2 + b;
System.out.println("The intersections are: (" + x1 + "," + y1 + ") (" + x2 + "," + y2 + ")");
}