如何从java中不同类的构造函数中访问变量?
所以我有3个类,我想从其中两个类中取一个变量,在第三个类中求和。代码如下:如何从java中不同类的构造函数中访问变量?,java,variables,constructor,Java,Variables,Constructor,所以我有3个类,我想从其中两个类中取一个变量,在第三个类中求和。代码如下: import java.util.*; public class Car{ String tip,marka; public double sborMestaCar = 0; double mesta, skorost; public Car(String tip, String marka, double mesta, double skorost){ Scanner sc = n
import java.util.*;
public class Car{
String tip,marka;
public double sborMestaCar = 0;
double mesta, skorost;
public Car(String tip, String marka, double mesta, double skorost){
Scanner sc = new Scanner(System.in);
System.out.println("Vavedete tiput na kolata.");
tip = sc.nextLine();
System.out.println("Vavedete markata.");
marka = sc.nextLine();
System.out.println("Vavedete mestata.");
mesta = sc.nextDouble();
System.out.println("Vavedete max. skorostta.");
skorost = sc.nextDouble();
System.out.println("Suzdadenata kola e ot tip " + tip + ", markata e " + marka + ", ima " + mesta + " mesta i maksimalnata i skorost e " + skorost);
sborMestaCar = sborMestaCar + mesta;
}
public Car(double sborMesta){
sborMestaCar = sborMesta;
}
}
第二个
import java.util.*;
public class Plane {
String tip,marka;
double mesta1k, mesta2k, skorost;
public int sborMestaSam = 0;
public Plane( String tip, String marka, double mesta1k, double mesta2k, double skorost ){
Scanner sc = new Scanner(System.in);
System.out.println("Vavedete tiput na samoleta.");
tip = sc.nextLine();
System.out.println("Vavedete markata na samoleta.");
marka = sc.nextLine();
System.out.println("Vavedete mestata za purva klasa.");
mesta1k = sc.nextDouble();
System.out.println("Vavedete mestata za vtora klasa.");
mesta2k = sc.nextDouble();
System.out.println("Vavedete max. skorostta.");
skorost = sc.nextDouble();
System.out.println("Suzdadeniqt samolet e ot tip " + tip + ", markata e " + marka + ", ima " + mesta1k + " mesta v purva klasa, " + mesta2k +" mesta vuv vtora klasa" + " i maksimalnata i skorost e " + skorost);
}
public Plane(double sborMesta){
sborMestaSam = sborMesta;
}
}
第三个
import java.util.*;
public class TestPlane {
public static void main(String[] args){
String marka = "", tip = "";
int mesta = 0, mesta1k = 0, mesta2k = 0, skorost = 0;
int b = 1, c = 1;
double sborMestaK = 0, sborMestaS = 0, obshtSbor = 0;
Scanner sc = new Scanner(System.in);
while(b == 1){
Car car = new Car(tip, marka, mesta, skorost);
System.out.println("Iskate li da suzdadete druga kola? 1 = Da 0 = Ne");
b = sc.nextInt();
}
System.out.println("Vie zavurshihte suzdavaneto na kolite. Preminavane kum suzdavane na samoleti...");
while(c == 1){
Plane plane = new Plane(tip, marka, mesta1k, mesta2k, skorost);
System.out.println("Iskate li da suzdadete drug samolet? 1 = Da 0 = Ne");
c = sc.nextInt();
// sborMesta =
}
Car obshtiMestaK = new Car(sborMestaK);
Plane obshtiMestaS = new Plane(sborMestaS);
obshtSbor = obshtiMestaK.sborMestaCar + obshtiMestaS.sborMestaSam;
System.out.println("Sbora ot mestata na vsi4ki sazdadeni prevozni sredstva e raven na " + obshtSbor);
}
}
您可以在System.out.println部分的末尾查看第3个类,您可以看到我有obshtSbor-变量,它由obshtiMestaK.sbormestaar+obshtiMestaS.sbormestaam组成。程序可以工作,但返回0作为obshtSbor的值。因此,首先,您使用了错误的赋值,试图将Car和Plane的参数值更改为字段值。应该是sbormestaar=sborMesta和sbormestaam=sborMesta
其次,您使用0作为Car和Plane构造函数的参数
double sborMestaK=0,sborMestaS=0,obshtSbor=0代码>so 0+0=0。你期望看到什么?作业从右到左进行。@SotiriosDelimanolis在sborMesta=sbormestar
您正在将sbormestar
的值分配给sborMesta
@SotiriosDelimanolis刚刚修复了这个问题。我仍然得到0.0作为求和的答案。即使你计算它,你仍然通过0作为carobshtimestak=newcar(sborMestaK)中的参数
变量sborMestaK
为零,因为它自声明以来没有更改。我不明白你的意思。首先-我的代码中的sbormestaar=sborMesta和sbormestaam=sborMesta是相同的,所以我不知道你为什么在回答中使用它。第二,我没有“obshtSbor=sborMestaK+sborMestaS”,我有“obshtSbor=obshtiMestaK.sbormestar+obshtiMestaS.sborMestaSam;”公共平面(double-sborMesta){sborMesta=sbormestaam;}您正在将构造函数参数设置为字段的值(默认为0),而应该是公共平面(double-sborMesta){sbormestaam=sborMesta;}您到目前为止了解到了吗?double-sborMestaK=0,sborMestaS=0,obshtSbor=0;车辆obshtiMestaK=新车(SBORESTAK);平面obshtiMestaS=新平面(sborMestaS);obshtSbor=obshtiMestaK.sbormestar+obshtiMestaS.sborMestaSam;在这里,您将零传递给两个构造函数,因此即使您正确分配了零,您也会得到一个零的总和。使用调试器为您自己创建一个像样的IDE,并检查代码是如何执行的。当您修复了分配时,请尝试类似于double-sborMestaK=10、sborMestaS=10、obshtSbor=0;并检查输出