2016-04-13 15 views
-1

Java için oldukça yeniyim, bu yüzden lütfen 5 yaşında olduğumu ve beş yaşına uygun bir yanıt gerektirdiğini hayal edin.Bir yöntemdeki bir dizinin uzunluğunun alınması işe yaramaz

İlk bazı bilgiler: Ben büyür ve gerektiğinde küçülür bir "Dinamik dizi" yapmaya çalışıyorum. Ben arraylists biliyorum, bunun amacı ben kendim bunu yapmak ve aynı zamanda ArrayList s çalışma zaten nasıl olduğunu varsaymak beri aynı zamanda öğrenmek gerekir.

Sorun: Biri tüm dizinin ortalama değerini hesaplamak için yukarıdaki nedenlerden dolayı bazı fantezi yöntemleri eklemek istiyorum. uzunluğunu almayı denediğimde (varible.length) diğer bazı yöntemlerde işe yaramıyor!

Bu

çalışmıyor yöntemdir:

public double meanValue() { 
    double meanDiv = 0; 
    int div = x.length; 

    for (int i = 0 ; i < div ; i++) { 
     meanDiv += x[i]; 
     System.out.println("Testing"); 
    } 
    meanDiv = meanDiv/x.length; 
    return meanDiv; 
} 

O NaN (sayı değil) döndürüyor, ancak 0 döndürür bölünme bölümünü atlarsanız, tamamen x.length okumuyor.

En kötü bölüm? için yerine sürerken burada, vb yol çok şeyler değişkenlerin farklı tür denedim

public long last() { 
    long pepe = -1; 
    if (x.length==0) { 
     System.out.println("Nothing in the array! Returning -1"); 
    } 
    else { 
     pepe = x[x.length-1]; 
    } 
    return pepe; 
}  

edilir: Bazı yöntemler son konumunu dönmek için örneğin bu bir çalışıyoruz gerekirse, tüm sınıf:

public class dynamicArray { 
    private long[] x; 
    private int size = 0; 

    public dynamicArray() { 
     x = new long[size]; 
    }           // CREATES THE ARRAY 

    public long grab(int x) { 
     if (x < this.x.length) { 
      return this.x[x]; 
     } 
     else { 
      System.out.println("(GET) Out of bounds"); 
      return -1; 
     } 
    } 
    public void add(long value) { 
     dynamicInAction(); 
     x[size] = value; 
     size++; 
    }         // ADD A NUMBER TO THE ARRAY 
    public void remove(int position) { 

    }        // REMOVES A SPECIFIC ARRAY POSITION---------------- 
    public long last() { 
     long pepe = -1; 
     if (x.length==0) { 
      System.out.println("Nothing in the array! Returning -1"); 
     } 
     else { 
      pepe = x[x.length-1]; 
     } 
     return pepe; 
    }           // RETURNS THE VALUE IN THE LAST POSITION 
    public long first() { 
     long pepe = -1; 
     if (x.length==0) { 
      System.out.println("Nothing in the array! Returning -1"); 
     } 
     else { 
      pepe = x[0]; 
     } 
     return pepe; 
    }           // RETURNS THE VALUE IN THE FIRST POSITION 
    public void modify(int position, int value) { 
     if (position < x.length && position >= 0) { 
      x[position] = value; 
     } 
     else { 
      System.out.println("This position does not exist"); 
     } 
    }     // MODIFIES A SPECIFIC POSITION TO THE ASSIGNED VALUE 
    public int size() { 
     return x.length; 
    }            // RETURNS THE CURRENT ARRAY SIZE 
    public double meanValue() { 
     double meanDiv = 0; 
     int div = x.length; 

     for (int i = 0 ; i < div ; i++) { 
      meanDiv += x[i]; 
      System.out.println("Testing"); 
     } 
     meanDiv = meanDiv/x.length; 
     return meanDiv; 
    }          // RETURNS THE MEAN VALUE OF THE WHOLE ARRAY------------- 
    public long median() { 
     return -1; 
    }           // RETURNS THE MEDIAN VALUE OF THE WHOLE ARRAY------------- 
    private void dynamicInAction() { 
     if (x.length == size) { 
      long[] temp = new long[x.length]; 
      for (int i = 0; i<x.length ; i++) { 
       temp[i] = x[i]; 
      } 
      x = null; 
      //System.gc(); // Might be unnecessary 
      x = new long[size+1]; 
      for (int i = 0; i<temp.length ; i++) { 
       x[i] = temp[i]; 
      } 
     } 
    }        // ENSURES THE ARRAY GROWS WHEN NEEDED 
    public void reverse() { 

    }           // REVERSING ALL POSITIONS IN THE ARRAY------------------ 
    public void clear() {                           
     x = null; 
     size = 0; 
     x = new long[size]; 
    }           // CLEARS THE ARRAY 



} 
+0

Benim için iyi çalışıyor. Belki de test ettiğiniz veriler de dahil olmak üzere, sorununuzunuzu gösteren, runnable bir örnek vermelisiniz – MadProgrammer

+0

10 Test ederken, dizideki en az bir elemanı vardı? –

+0

@ImeshaSudasingha Sorun buydu, tüm listeyi yanlışlıkla temizledi. Teşekkürler ve üzgünüm. – FREEDOM

cevap

0

Kurucuda 0 büyüklüğünde bir dizi oluşturuyorsunuz. Bu, x'i başka bir diziye yeniden atamadığınız sürece, her zaman 0 öğeye sahip olacağı anlamına gelir. şöyle yapıcısı içinde boyut olarak geçen deneyin:

public DynamicArray(int size){ 
    this.size = size; 
    this.x = new long[size]; 
} 

Ayrıca Java sınıf adları (haber dynamicArray değil DynamicArray) her kelime için büyük harf var.

+0

Teşekkürler, sorun oldu. Büyük harf veya genel bir şey olması şart mı? – FREEDOM

+0

Sorun değil. Evet, tüm Java sınıfları ve arayüzleri her kelime için büyük harflere sahiptir. Deve vakası değişkenler ve yöntemler için kullanılır. –

+0

Özel void dynamicInAction() {'gibi bir şey? Hangi 'add' denir? – MadProgrammer

0

Projeniz çalışır. İşte kod

public class HelloWorld{ 

    public static void main(String []args){ 
     dynamicArray s = new dynamicArray(); 
     s.add(1); 
     s.add(3); 

     System.out.println(s.meanValue()); 
    } 
} 

sonucudur:

2.0 

Yani, çağırmadan önce en az 1 eleman eklemek gerek "meanValue()" Sınıf meanValue ve işlenmiş sonuncu

0

olanlar iki yöntem onları çalıştırdığımda iyi. bana gösterdi Bunlar sysout:

Testing 
Testing 
Testing 
Testing 
mean 3.25 
last 5 

i sınıfın nesnesi oluşturmak ve kullanmak için kullanılan kod.

public static void main(String ...args) { 
     DynamicArray myArr = new DynamicArray(); 
     myArr.add(1); 
     myArr.add(2); 
     myArr.add(5); 
     myArr.add(5); 
     System.out.println("mean " + myArr.meanValue()); 
     System.out.println("last " + myArr.last()); 
    } 
0

Önceki cevaplar 0'a boyutu başlatıldı gelmiş Ama bu gerçek sorun olmadığını doğrudur.

You have 2 ana konular:

1) dynamicInAction -Sen bu yöntemde dizinin boyutunu artırmak asla! Sadece aynı boyutta bir temp dizisi yaratırsınız, x içeriğini temp'a kopyalayın, sonra x'i temp olarak atayın, asla boyutunu artırmayın. Yeni sıcaklık dizisini oluştururken boyutu artırmak için hafif bir ayarlamaya ihtiyacınız vardır. İkincisi artık sadece değeri, eklenti yönteminde boyutunu artırmak gerekmez)

private void dynamicInAction() { 
    if (x.length == size) { 
     long[] temp = new long[++size]; 
     for (int i = 0; i<x.length ; i++) { 
      temp[i] = x[i]; 
     } 

     //Just assign x to temp 
     x = temp; 

     //x = null; Unnecessary 
     //System.gc(); // Unnecessary 
     //Dont create another array, you already have temp..just assign it 
     //x = new long[size+1]; 
     //for (int i = 0; i<temp.length ; i++) { 
     // x[i] = temp[i]; 
     //} 
    } 
}  

2: Ben size 'ön artırım yapılması' yeni geçici dizisi oluştururken kullanılan yeni değeri aldığım için:

+0

İçgörü ve temel açıklama için teşekkürler! Add ile birlikte bir hatam var: x [size] = value; x [size-1] = değer olmalı; veya itd sınırlardan dışarı çıkar. – FREEDOM

+0

jeez im yeni bir satıra ulaşmaya çalışıyor ve sadece cevabımı hemen gönderiyor .. aynı yorumu sormaya çalışıyordum x = temp; x dizisindeki artış tam olarak nerede çalışır? Çalışmamıza rağmen neden olduğunu anlamak istiyorum – FREEDOM

+0

x [size-1] ile ilgili haklısınız. Cevabı düzeltdim. – pczeus

İlgili konular