2016-04-11 15 views
0

別のコードのArrayListに書き込んだ情報にアクセスするのは私の頭を上げません。 私は人々が得た他の答えからそれを理解しようとしてきましたが、私はそれを正しく理解していないようです。ArrayListから別のクラスに値を取得する方法

私はいつも同じ応答java.lang.IndexOutOfBoundsExceptionを得るようです:インデックス:0、サイズ:0。それはうまくいかず、私はそれが何か単純であり、それだけですべての怒りを和らげていると確信しています。

だから私のテストプロジェクトで、私は

import java.util.ArrayList;  
class Values {  
    ArrayList<Double> values = new ArrayList<>(); 

    public ArrayList<Double> getValueList() { 
     return values; 
    } 

    public void addValue(double price) { 
     values.add(price); 
    } 

    public double getValue(int location) { 
     return values.get(location); 
    }  
} 

ゲッターとセッタークラスを持ってそれから私はArrayListに書き込むために、これらのメソッドを使用して別のクラスを持っています。

import java.util.ArrayList; 

public class ValuesTesting { 
    Values v = new Values(); 
    public static void main(String[] args) { 
     ValuesTesting vT = new ValuesTesting(); 
     vT.addValue1(); 
     vT.addValue2(); 
     ValueTesting2 vT2 = new ValueTesting2(); 
     vT2.main(); 
    } 

    private void addValue1() { 
     double price = 1502.0; 
     v.addValue(price); 
    } 

    private void addValue2() { 
     double price = 1204.0; 
     v.addValue(price); 
    } 
} 

そして私はこのコードを持っている私の第三のクラスから値を読みたい:

import java.util.ArrayList; 
public class ValueTesting2 { 
    Values v = new Values(); 
    public void main() { 
     getList(); 
    } 
    private void getList() { 
     System.out.println(Double.toString(v.getValueList().get(0))); 
    } 
} 

私が命名が完全に間違っている知っているが、私はこれだけは、その私ができるクラスであることを意図しついにこれを理解するが、私はちょうど傾ける。

ありがとうございました:)

答えて

1

両方のクラスで新しいValuesオブジェクトを作成しています。値クラスのインスタンスが異なるため、データは共有されません。同じインスタンスを共有したい場合は、参照を一方から他方に渡す必要があります。

境界例外のうち指数の理由は、あなたのメインの中であなたは、インデックス0を取得しようとしているということですが、その大きさは、あなたがやっている0

+0

感謝されます! –

0

あるので、あなたが、それに任意の値を追加したことはありませんValueTesting2 vT2 = new ValueTesting2();Valuesクラスのオブジェクト 'v'を作成します。 vT2.main()は、この新しく作成されたオブジェクトのArraylistの0番目の要素を取得しようとしますが、これは無効です。

これらは両方とも異なるオブジェクトです。そのため、このエラーが発生しています。

値を持つArraylistをValueTesting2のコンストラクタに渡してから試すことができます。

0

参照を渡していないため、値はValueTesting2への参照を渡します。 これを行うだけです 変更Values v = new Values();static Values v = new Values();と 変更vT2.main();vT2.main(v);ここでは参考としてvを渡しています。

ので、あなたの完全なValuesTestingコードは、高速応答のための

import java.util.ArrayList; 

    public class ValuesTesting { 
    static Values v = new Values(); 
    public static void main(String[] args) { 
     ValuesTesting vT = new ValuesTesting(); 
     vT.addValue1(); 
     vT.addValue2(); 
     ValueTesting2 vT2 = new ValueTesting2(); 
     vT2.main(v); 
    } 
    private void addValue1() { 
     double price = 1502.0; 
     v.addValue(price); 
    } 
    private void addValue2() { 
     double price = 1204.0; 
     v.addValue(price); 
    } 

} 
関連する問題