2016-04-11 14 views
0

Başlığı, başka bir kod çalışmasında ArrayList'a yazdığım bilgilere erişemiyorum. İnsanların kazandıkları diğer cevaplardan anlamaya çalışıyorum ama asla doğru bulmuyorum.Bir ArrayList öğesinden, tanımlandıktan sonra başka bir sınıftan nasıl değerler alınır?

Hep aynı yanıtı alır gibi görünüyor java.lang.IndexOutOfBoundsException: Dizin: 0, Boyut: 0. İşe yaramıyor ve oldukça basit bir şey olduğundan eminim ki bu sadece daha da çirkin bir şey.

Yani benim test projede ben

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); 
    }  
} 

Sonra bu yöntemleri kullanan başka sınıf ArrayList yazmak için gelmiş bir alıcı ve ayarlayıcı sınıf var.

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); 
    } 
} 

Sonra bu kodu olan benim üçüncü sınıftan değerleri okumak istiyorum:

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))); 
    } 
} 

Ben adlandırma tamamen yanlış olduğunu biliyorum ama sadece elimden bir sınıf olmasını amaçlanan Sonunda bunu anlamaya, ama sadece yapamam. Yeni Değerler oluştururken

Herhangi bir yardım çok iyi olurdu, teşekkürler :)

cevap

1

hem sınıflarında itiraz ediyoruz. Değer sınıfının farklı örnekleri olduklarından, verileri paylaşmayacaklar. Aynı örneği paylaşmak isterseniz, birinden diğerine bir referans göndermeniz gerekir.

sınırları dışında dışarı indeksi nedeni yapıyorsun zaman onun büyüklüğü 0.

+0

Teşekkür olacak! –

0

olduğunu, böylece main Dizini 0 gitmeye çalışıyoruz, ancak bunun herhangi bir değer eklendi asla olmasıdır ValueTesting2 vT2 = new ValueTesting2();, Values sınıfının 'v' nesnesini oluşturacaktır. Şimdi vT2.main(), geçerli olmayan bu yeni oluşturulmuş nesnenin Arraylist'inin 0ncı öğesini elde etmeye çalışacaktır.

ikisi de farklı nesnelerdir. Bu yüzden bu hatayı alıyorsunuz.

Değerleri olan Arraylist değerini ValueTesting2 yapıcısına iletebilir ve sonra deneyebilirsiniz.

0

Referansı geçemiyorsunuz, bu nedenle Değerler Referansını ValueTesting2'ye aktarın. sadece bunu Values v = new Values(); ile static Values v = new Values(); ve değiştirin vT2.main(); için vT2.main(v); biz burada referans olarak geçiriyoruz.

nedenle tam ValuesTesting kod hızlı cevap için

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); 
    } 

} 
İlgili konular