如何打印出a-f点的值而不重复每次输入的内容?而且我的错误是我的程序返回时,方程式每次都没有解决方案?
public class LinearEquations {
Scanner input = new Scanner(System.in);
private double a, b, c, d, e, f = 0;
double x, y;
public double getA() {
System.out.println("Enter the value of a: ");
double a = input.nextDouble();
return a;
}
public double getB() {
System.out.println("Enter the value of b: ");
double b = input.nextDouble();
return b;
}
public double getC() {
System.out.println("Enter the value of c: ");
double c = input.nextDouble();
return c;
}
public double getD() {
System.out.println("Enter the value of d: ");
double d = input.nextDouble();
return d;
}
public double getE() {
System.out.println("Enter the value of e: ");
double e = input.nextDouble();
return e;
}
public double getF() {
System.out.println("Enter the value of f: ");
double f = input.nextDouble();
return f;
}
public boolean isSolvable() {
if ((a * d) - (b * c) == 0){
return false;
}
return true;
}
public double getX() {
double x = (((e * d) - (b * f)) / ((a * d) - (b * c)));
return x;
}
public double getY() {
double y = (((a * f) - (e * c)) / ((a * d) - (b * c)));
return y;
}
这是主要的课程
public static void main(String[] args) {
LinearEquations pointA = new LinearEquations();
LinearEquations pointB = new LinearEquations();
LinearEquations pointC = new LinearEquations();
LinearEquations pointD = new LinearEquations();
LinearEquations pointE = new LinearEquations();
LinearEquations pointF = new LinearEquations();
System.out.println(pointA.getA());
System.out.println(pointB.getB());
System.out.println(pointC.getC());
System.out.println(pointD.getD());
System.out.println(pointE.getE());
System.out.println(pointF.getF());
LinearEquations pointX = new LinearEquations();
LinearEquations pointY = new LinearEquations();
if (pointX.isSolvable() && pointY.isSolvable()) {
System.out.println("x is " + pointX.getX() +
" and y is " + pointY.getY());
} else {
System.out.println("The equation has no solution");
}
答案 0 :(得分:3)
您的逻辑存在一些问题,当您实际只想要1时,您正在创建 8 LinearEquation对象。
public static void main(String[] args) {
LinearEquations theOne = new LinearEquations();
System.out.println(theOne.getA());
System.out.println(theOne.getB());
System.out.println(theOne.getC());
System.out.println(theOne.getD());
System.out.println(theOne.getE());
System.out.println(theOne.getF());
if (theOne.isSolvable()) {
System.out.println("x is " + theOne.getX() +
" and y is " + theOne.getY());
} else {
System.out.println("The equation has no solution");
}
}
答案 1 :(得分:3)
在您的方法中,您不是要向类成员写入数据。您只需重新定义函数内的局部变量并将值写入其中。 在你的代码中
public double getF() {
System.out.println("Enter the value of f: ");
double f = input.nextDouble();
return f;
}
应该是
public double getF() {
System.out.println("Enter the value of f: ");
this.f = input.nextDouble();
return f;
}
除此之外,您可以使用多个对象,每个对象都有一个输入值。你应该只使用一个具有所有值的方法,以便方程式克拉有效。
答案 2 :(得分:1)
好吧,让我试着整理一下这里提到的所有内容。
您的第一个主要问题是您希望变量以某种方式运行,但您没有正确处理它们。那是因为你没有正确使用他们的范围。
简单地说,变量的范围,它可用的位置以及它将会活动多久#34;。例如,变量a, b, c, d, e, f
的范围是整个类LinearEquaions
。这意味着所有这些变量应该可用于类的所有成员函数,并且只要包含它们的对象存在就会存在。该对象之外的任何内容都不应该直接访问这些变量。一旦对象死亡,它就会杀死所有私有变量。
每次在大括号{}
中编写代码时,都会定义新范围。它也被称为代码块'。处理范围和大括号时要记住的一个重要规则是每个嵌套范围(在大多数情况下)都可以访问在其包含对象中定义的变量和函数。这就是为什么一个类的所有函数,它们基本上是在类中编写的代码' {}
,可以访问其包含类的私有变量。更进一步,定义每个函数的代码是,猜猜是什么?在函数{}
中,每个函数都有自己的范围。
这仍然无法直接解释为什么您的代码无效。我们来看看你的一个功能。为了演示范围,我包括了类和变量声明:
public class LinearEquations {
Scanner input = new Scanner(System.in);
private double a, b, c, d, e, f = 0;
double x, y;
public double getA() {
System.out.println("Enter the value of a: ");
double a = input.nextDouble();
return a;
}
.
.
.
}//end of class LinearEquations, and its scope
查看类的范围,并注意它是如何包含其中编写的所有代码的。现在,请注意定义函数getA()
的代码块。在函数外部,您可以按如下方式定义变量:
private double a, b, c, d, e, f = 0;
在这里,你说:我希望所有这些都可以在我班级的任何地方使用,但只有this
类的成员,它们都是double类型,等于0。
接下来,
public double getA() {
System.out.println("Enter the value of a: ");
double a = input.nextDouble();
return a;
}
行double a = input.nextDouble();
定义了一个名为a
的 new 变量,该变量位于函数范围内,与类的变量a
无关。发生这种情况是因为您可以在不同的范围内使用相似名称的变量。这是您的代码的第一个问题。你失去了价值,因为你不是在工作中将它保存在你的类变量中,而是将它保存在一个临时变量中,一旦函数完成执行就会死掉,并返回它(显然不等于保存它)
要解决这个问题,正如mohmicro建议的那样,您应该使用this
关键字来指定您希望编译器更新的变量。换句话说,当使用this.a = input.nextDouble();
代替double a = input.nextDouble();
时,你会说:将我刚才所做的工作保存到班级' a
变量,而不是函数的a
变量。同样的过程应该应用于你的所有getB / C ... F函数,并确保你从用户那里得到的值存储在类中,这反过来将允许isSolvable()
,{{1} }和getX()
访问具有实际信息的变量(因为在当前实现中,getY()
保持为0)。
要回答第二个问题,您的每个功能都可以完成多项任务。一般来说,这被认为是不好的做法,并导致不连贯的功能。虽然可能似乎更高效或使用更少的代码行,但在尝试读取代码以进行维护或调试时会增加混淆。为什么?因为当它有多个功能时,你可能会忽略某些功能的用途,或者它不是单功能一用的问题。
这也是你问题的根源。每次要获取任何一个变量a, b, c, d, e, f
的值时,都要与用户进行对话,并让他更改变量的值。这是因为你的函数做了两件事,它设置一个值并返回它。很不受欢迎。要解决这个问题,你需要分而治之。每个get函数都应分为两个不同的函数。一个用来设置一个来自用户的值的变量,另一个用来在需要时获取该值。这是一个例子:
a,...,f
这样,只要您需要来自用户的变量public void setA() {
System.out.println("Enter the value of a: ");
this.a = input.nextDouble(); //get the value from the user and insert it to the object's variable a
}
public double getA() {
return a;
}
的新值,就可以致电a
,只要您需要获取setA()
中的内容,就可以调用{{ 1}}。单功能酮目的。