Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java中不同类的构造函数中访问变量?_Java_Variables_Constructor - Fatal编程技术网

如何从java中不同类的构造函数中访问变量?

如何从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

所以我有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 = 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=0so 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;并检查输出