该程序的目的是打印 解决方案的数量和二次函数的解决方案, 由用户输入。
这里的问题是我因私有变量而出错, 为什么是这样?同样对于我的构造函数,它声明即使我的变量也无法解析 它们是在主要方法中建立的。最后,我的变量将传递给main方法或“toString”方法以供使用 在主要方法中。
这是针对学校作业的,我的教授要求我使用“toString”方法以及私有变量。我提前为任何格式错误和大问题道歉,因为我是新的 到这个网站。
import java.util.Scanner
public class QuadraticSolver
{
private static Scanner in;
public static void main(String[]args)
{
QuadraticSolver qs = new QuadraticSolver();
in = new Scanner(System.in);
private double a;
private double b;
private double c;
System.out.println("Enter coefficients for quadratic function. ");
a = in.nextDouble();
b = in.nextDouble();
c = in.nextDouble();
qs.getRoot1(a,b,c);
qs.getRoot2(a,b,c);
qs.numOfSolutions(a,b,c);
System.out.println("Your quadratic function is " + a + "x^2 + " + b + "x + " + c);
System.out.println(qs.toString());
}
public QuadraticSolver()
{
a = 0;
b = 0;
c = 0;
}
public double getRoot1(double a,double b,double c)
{
private double root1;
root1 = (-b + Math.sqrt(Math.pow(b,2) - 4*a*c)) / (2*a);
return root1;
}
public double getRoot2(double a,double b,double c)
{
private double root2;
root2 = (-b + Math.sqrt(Math.pow(b,2) - 4*a*c)) / (2*a);
return root2;
}
public int numOfSolutions(double a,double b,double c)
{
private int sol = 0;
private double d;
d = Math.pow(b,2) - 4*a*c;
if(d > 0)
{
sol = 2;
}
else if(d == 0)
{
sol = 1;
}
else if(d < 0)
{
sol = 0;
}
return sol;
}
public String toString()
{
return "There are(is) " + sol + " solution(s). x = " + root1 + " x = " + root2;
}
}
答案 0 :(得分:2)
您应该将变量移动到类级别:
public class QuadraticSolver {
private double a;
private double b;
private double c;
...
}
接下来,您需要访问属于对象qs
的变量:
public static void main(String[]args)
{
QuadraticSolver qs = new QuadraticSolver();
in = new Scanner(System.in);
System.out.println("Enter coefficients for quadratic function. ");
qs.a = in.nextDouble();
qs.b = in.nextDouble();
qs.c = in.nextDouble();
...
}
最后,您应该从方法getRoot1()
等中删除变量。这是因为每个方法都可以访问属于的变量a
,b
,c
对象本身。因此:
public double getRoot1()
{
double root1 = (-b + Math.sqrt(Math.pow(b,2) - 4*a*c)) / (2*a);
return root1;
}
在通话地点:
public static void main(String[]args)
{
...
double root1 = qs.getRoot1();
double root2 = qs.getRoot2();
int numsol = qs.numOfSolutions();
...
}
答案 1 :(得分:2)
私有实例变量属于一个类。当您创建作为类的实例的对象时,该对象可能具有属于该对象的实例变量;如果创建一个类的多个实例,则每个实例(对象)都有自己的一组实例变量。你在课堂上声明了那些:
public class QuadraticSolver
{
private static Scanner in;
private double a; // instance variables
private double b;
private double c;
现在,要访问这些变量,您需要拥有一个对象。如果您在类中的非静态方法中或在类的构造函数中,该方法将使用名为this
的对象,因此您可以说this.a
或仅{ {1}}获取该变量。如果您不在课堂之外,或者在课程中使用静态方法(包括a
),则需要告诉它您正在使用哪个对象。在您的计划中,main
方法的对象main
为qs
,您可以通过说QuadraticSolver
,qs.a
来获取该对象的实例变量{1}}等等。
方法内声明的变量是 local 变量。它们只能在该方法中使用。他们没有为对象声明实例变量。您不能在其上使用关键字qs.b
,因为该关键字仅用于实例变量(以及其他不属于变量的事物)。您不能使用该方法之外的变量。如果在一组内部花括号中声明它们,则不能在花括号外使用它们。如果声明一个与实例变量同名的局部变量,则两者之间没有连接。