2016-03-27 17 views
-2

Java programlamasında yeni bir kullanıcıyım ve programımda sorun yaşıyorum. Bir dizim var ve ondan maksimum tamsayı ayıklamak ve ana programa dönmek istiyorum. Ancak ArrayList kullanılarak olmadan . Yazdırdığımda bu belirli konumda 0 olmamalıdır, bu yüzden değiştiremiyorum. Şimdiye kadar yaptığım şeye bir bak, ama bence çok yanlış.Bir dizi Java'dan bir tamsayı nasıl kaldırılır

public int extractMax() 
    { 
     for (int i = 0; i < size; i++) 
     { 
      if(maxInsert == Queue[i]) 
      { 
       Queue[i] = null; 
       return maxInsert; 
      } 
     } return -1; 
    } 
+0

Ne yapacağımı bilmiyorum .... Şimdiye kadar hiç bir şey yapmadım –

+0

Neden downvotes? Benim için oldukça açık .. –

+0

Yapmaya çalıştığınız şeyi gerçekten anladığımdan emin değilim. En büyük tamsayıyı bulmak için dizi boyunca yinelemeye çalışıyorsunuz ve bir kez bu değeri döndürdünüz mü? Ya da söylediğim şeyi yapmaya çalışıyorsunuz ama aslında dizinin en büyük değerini kaldırıyor musunuz? – Afflicted

cevap

0

Yani burada mantık temelde büyük akım daha bir eleman daha büyük olup olmadığını görmek için dizinin her eleman arasında yineleme etmektir dizide öğe (ilk öğeden başlar). Daha büyük bir eleman bulunursa, maksimum değişken bu yeni değere sıfırlanır ve döngü devam eder. Daha büyük bir eleman bulunursa, aynı şey maksimum değişkeni güncelleyerek olur. Bu öğeyi diziden gerçekten çıkarmak için, orijinal boyuttan daha küçük bir boyuta sahip yeni bir dizi oluşturabilir, tüm öğeleri maksimuma yeni diziye kopyalayabilir ve tüm öğeleri maks. bir tarafından sola. Nasıl görünmesi gerektiği budur.

public int extractMax() 
     { 
      maxInsert = Queue[0]; 
      int maxIndex = 0; 
      for (int i = 1; i < size; i++)//get the location of the max element 
      { 
       if(maxInsert < Queue[i]) 
       { 
        maxInsert = Queue[i]; 
        maxIndex = i; 
       } 
      } 
      int[] temp = new int[Queue.length - 1]; 
      for(int j = 0; j < maxIndex; j++){ //adding elements up until the max 
       temp[j] = Queue[j]; 
      } 
      for(int k = maxIndex; k < temp.length; k++){ //adding elements after the max 
       temp[k] = Queue[k+1]; 
      } 
      Queue = temp; //queue is now this new array we've just made 
      return maxInsert; 
     } 
+0

evet, işte bu nokta ama ben de bu elemanın diziden kaldırılmasını istiyorum! –

+0

Anladım, düzenlemelerimi gör –

0

ilkel bir dizideki dizi böyle bir hata görecekti eğer boş atanamıyor: dizi Eğer

int boş den dönüştüremiyor

bir nesneler dizisidir (örneğin Tamsayı), sonra null'a atamak işe yarardı, ancak dizininizin girdilerini yerine bir Liste kullanmanız gerektiğinde kullanmanız önerilir.

Örneğin:

List<Integer> integers = new ArrayList<>(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,10})); 
System.out.println(integers.size()); 
integers.remove(new Integer(3)); 
System.out.println(integers.size()); 

yazdırmak istiyorum:

10 
9 
0

Temel olarak List nesnelerde gibi bir Array bir eleman kaldıramazsınız. Yeni Array oluşturun ve Queue numaralı tüm öğeleri, Array numaralı yeni sürümün dışında ekleyin. Ve son olarak, yeni diziyi Queue'a atayın. İşte bir örnek kod:

public int extractMax() 
{ 
    for (int i = 0; i < size; i++) 
    { 
     if(maxInsert == Queue[i]) 
     { 
      removeFromArray(i); 
      return maxInsert; 
     } 
    } return -1; 
} 


private void removeFromArray(int i) { 
    int[] newQueue = new int[Queue.length-1]; 

    int k = 0; 
    for (int j = 0; j < newQueue.length; j++,k++) { 
     if(i == j) { 
      k++; 
     } 

     newQueue[j] = Queue[k]; 
    } 

    Queue = newQueue; 
} 
İlgili konular