2012-11-15 414 views
1

我確定有一個非常簡單的解決方案,但我拼命努力尋找答案。我試圖從設置一個主類爲ClassA的值,然後在CLASSB檢索該值,並在返回主答案之前做別的事情吧:將變量傳遞給不同的類

例子:

public class Main { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     ClassA classA = new ClassA(); 
     ClassB classB = new ClassB(); 

     System.out.println("Number: "); 
     classA.setX(input.nextInt()); 

     System.out.println("Total: " + classB.printTotal()); 

    } // main 
} // class 

A類:

public class ClassA { 
    int x; 

    public int getX() { 
     return x; 
    } 

    public void setX(int x) { 
     this.x = x; 
    } 
} // class 

ClassB的:

public class ClassB { 
    ClassA classA; 

    public int printTotal() { 
     int y = classA.getX() * 5; 
     return y; 
    } 
} // class 

無論我輸入返回null。我明白爲什麼會出現這種情況,但我不知道解決方案。

回答

2

ClassB應該定義上ClassA的依賴性或者通過構造函數或(設定部)方法:

public ClassB(ClassA classA) { 
    this.classA = classA; 
} 

//or/and 

public void setClassA(ClassA classA) { 
    this.classA = classA; 
} 

並注入在main依賴性如下:

ClassB classB = new ClassB(classA); 
0

您的ClassB沒有引用ClassA的實例。所以,你可以再次使用一個設置或可能更好地與構造方法設置ClassA的實例:

public ClassB(ClassA instance) { 
    this.classA = instance; 
} 
+0

理想情況下,它不僅有任何參考,而且還有一個針對您設置X的實例。 – Thilo

+0

插入我錯過了禾寫,因爲它是如此無知。也許他想使用零? ;-) – rekire

1

而不是具有ClassB的一個ClassA的實例,也許你應該傳遞一個ClassA的對象作爲參數傳遞給printTotal:

public class ClassB { 
    public int printTotal(ClassA classA) { 
     int y = classA.getX() * 5; 
     return y; 
    } 
} // class 
... 

System.out.println("Total: " + classB.printTotal(classA)); 

希望幫助!

+0

謝謝你提供了另一個答案,也解決了我的問題。 – Josh

1

在主,設置classB的classA變量與classA對象,休息應該沒問題。

如果你的兩個類都在相同的包,那麼你可以簡單地分配對象如下,你就完成了。

ClassA classA = new ClassA(); 
    ClassB classB = new ClassB(); 
    classB.classA = classA;//assign classA to ClassB's classA attribute 

否則:

ClassA classA = new ClassA(); 
    ClassB classB = new ClassB(); 
    classB.setClassA(classA);//assign classA to ClassB's classA attribute 

和ClassB的,加入的setter方法爲:

 public void setClassA(ClassA classA){ 
     this.classA = classA; 
    } 
+0

感謝您的明確示例,並回答。我現在有3種方法來實施解決方案,這個額外的解決方案幫助我充分理解了這個問題。 – Josh

+0

@downvoter:請留下一些評論。 –

0

class BclassA應參照的A的對象。

納入class B

public B(A a) { 
    this.classA = a; 
} 

一個構造在main方法,初始化classBclassB = new B(classA);

0

您需要在打印該值之前添加到ur main。

classB.classA = classA; 

所以在您的ClassB的初始化ClassA的可以有你在你的主設置的x值。 希望這有助於好運!