2015-01-04 26 views
0

我有一個程序,將推動彈出和顯示,但我不能彈出我的程序中推入的數字可能我不能刪除該數組的元素。這是到目前爲止我的代碼:如何從原始數組中刪除元素

import java.io.*; 
import java.util.*; 
import java.awt.*; 
import javax.swing.*; 

public class Class2 { 
    public static void main(String args[]) throws IOException { 
     BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
     System.out 
       .print("1.)Push\n2.)Pop\n3.)Display\n4.)Exit\n\nChoose Item :"); 
     int x = Integer.parseInt(in.readLine()); 
     int[] a = new int[10]; 
     int b = 0; 

     int i = 0; 

     do 
     { 
      switch (x) { 
      case 1: 
       System.out.print("Enter Push number :"); 
       int v = Integer.parseInt(in.readLine()); 
       a[b] = v; 
       b += 1; 

       System.out.print("Item push :" + v + "\n"); 

       System.out 
         .print("1.)Push\n2.)Pop\n3.)Display\n4.)Exit\n\nChoose Item :"); 
       x = Integer.parseInt(in.readLine()); 

       if (x == 3) { 
        for (i = 0; i < b; i++) { 
         System.out.print(a[i] + " "); 
        } 
       } 
       break; 

      case 2: 

       System.out.print("Enter Pop Number :"); 
       int c = Integer.parseInt(in.readLine()); 

       if (c == a[i]) { 

       } 

       System.out.print("Item Pop :" + c + "\n"); 

       System.out 
         .print("1.)Push\n2.)Pop\n3.)Display\n4.)Exit\n\nChoose Item :"); 
       x = Integer.parseInt(in.readLine()); 

       if (x == 3) { 
        for (i = 0; i < b; i++) { 
         System.out.print(a[i] + " "); 
        } 
       } 

       break; 
      case 4: 
       break; 
      } 

     } while (x == 1 || x == 2); 
    } 
} 
+0

你想從最後或任何用戶想要的數字? – Prashant

+0

是的,例如我推了2,5和6。然後當我彈出2和6,然後當我選擇顯示屏幕將只有5。 – shampoo

+2

Pop僅適用於最後一個項目,因此您將永遠無法彈出除最後一次推送以外的任何項目 –

回答

0

首先,如果你想改變一個數組的元素,那麼你不應該使用一個數組。

如果你真的不想使用容器,那麼你可以動態地分配一個沒有你想要刪除的元素的新數組(不是一個好主意,可能是因爲糟糕的性能和浪費的內存)。

這可能是返回新數組的方法:

public static int[] removeElementAt(int [] array, int index){ 
    if(index > 0 && index < array.length){ 
     int [] newArray = new int[array.length - 1]; 
     for(int i=0; i<index; i++) 
      newArray[i] = array[i]; // copying elements 
     for(int i=index+1; i<array.length; i++) 
      newArray[i-1] = array[i]; 
     array = newArray; 
    } 
    return array; 
} 

這只是一個簡單的例子:

myArray = Class.removeElementAt(myArray, 5); // removes 6. element 

你也可以使用函數removeElement從API ArrayUtils,像此:

array = ArrayUtils.removeElement(array, element) 

另一種替代方法是將數組轉換爲列表,刪除元素,然後將其轉換回數組:不是一個好主意,因爲您可以直接使用ArrayList

所以,想法是當你想修改內容時使用動態容器,否則使用正常的原始數組。

0

當你推256你有3項隊列中吧:

a[0] == 2 
a[1] == 5 
a[2] == 6 

當你取出2,你想刪除它來自陣列。要做到這一點,你需要複製的一切,其中2從進入位置上方彈出後,使你最終:

a[0] == 5 
a[1] == 6 

該代碼,這將是這個樣子:

int popPosition = findPopPosition(); 
for(int i = popPosition + 1; i < MAX; i++) 
    a[i - 1] = a[i]; 
b--; // Decrease effective queue size 

其中findPopPosition()需要查找2所在的索引,因此在此示例中它將返回0

或者,或者,用戶可以直接輸入彈出位置(所以彈出元素0)而不是指定他們想要彈出什麼值。這可能更有用。

+0

錯誤先生無法找到符號 – shampoo

+0

@shampoo我輸入的代碼並不打算複製/粘貼到您的代碼中。它更多地向你展示了它是如何工作的想法,以便你有必要考慮將它編碼到你的項目中。它需要定義'findPopPosition()'以及定義'MAX',現在你已經在你的代碼中硬編碼爲'10' – Dtor

+0

是的,我知道了它嗯iam試圖做到這一點等待 – shampoo

0

您可以使用下面的代碼,它可能會解決您的問題。

  int brr[]= new int [a.length-1]; 
       int j=0; 
       for(;j<a.length;j++) 
       { 
        if(c== a[j]) 
        { 
         break; 
        } 
        else{ 
         brr[j]=a[j]; 
        } 
       } 
       for(j=j+1;j<a.length;j++) 
       { 
       brr[j-1] =a[j]; 
       } 

in display show brr array。

+0

問題是我的彈出只會變爲0,它不會被刪除 – shampoo

+0

如果你需要減小大小,那麼你必須創建另一個數組..在從用戶獲取值之後不要將該值存儲到新數組 – Prashant

0

並非所有測試用例都已處理完畢,而是根據您的要求提供了一個示例工作程序。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class ArrayDemo { 
    public static void main(String[] args) throws Exception { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Enter the Array Max Capacity"); 
     int maxSize = Integer.parseInt(br.readLine().trim()); 
     int[] array = new int[maxSize]; 
     int arrayCount = 0; 
     int choice = 0; 
     do { 
      System.out.println("\n1.Insert\n2.Delete\n3.Display\n4.Exit"); 
      choice = Integer.parseInt(br.readLine().trim()); 
      switch (choice) { 
      case 1: 
       boolean insertTrue = insertElement(br, maxSize, array, 
         arrayCount); 
       if (insertTrue) { 
        arrayCount++; 
       } 
       break; 
      case 2: 
       System.out.println("Enter Element to delete"); 
       int delElement = Integer.parseInt(br.readLine().trim()); 
       int numOccurrence = getOccurrenceCount(array, arrayCount, 
         delElement); 

       int newArrayCount = arrayCount - numOccurrence; 
       if (numOccurrence == 0) { 
        System.out.println("No Such Element to delete"); 
       } else { 
        array = deleteElement(array, arrayCount, delElement, 
          newArrayCount,maxSize); 

       } 
       arrayCount =newArrayCount; 
       break; 
      case 3: 
       displayArray(array, arrayCount); 
       break; 
      case 4: 
       System.out.println("Exiting"); 
       break; 
      default: 
       System.out.println("Invalid Choice, Exiting"); 
       choice = 4; 
      } 
     } while (choice >= 1 && choice <= 3); 
    } 

    private static int[] deleteElement(int[] array, int arrayCount, 
      int delElement, int newArrayCount,int maxSize) { 
     int newArray[] = new int[newArrayCount]; 
     int index=0; 
     for (int i = 0; i < arrayCount; i++) { 
      if (array[i] != delElement) { 
       newArray[index] = array[i]; 
       index++; 
      } 
     } 
     resetArray(array, maxSize); 
     for(int i=0;i<newArrayCount;i++){ 
      array[i]=newArray[i]; 
     } 
     return array; 
    } 

    private static int[] resetArray(int[] array,int maxSize){ 
     for(int i=0;i<maxSize;i++){ 
      array[i]=0; 
     } 
     return array; 
    } 

    private static int getOccurrenceCount(int[] array, int arrayCount, 
      int delElement) { 
     int numOccurrence = 0; 
     for (int i = 0; i < arrayCount; i++) { 
      if (array[i] == delElement) { 
       numOccurrence++; 
      } 
     } 
     return numOccurrence; 
    } 

    private static void displayArray(int[] array, int arrayCount) { 
     if (arrayCount == 0) { 
      System.out.println("No Elements to Display"); 
     } else { 
      System.out.println("Array is"); 
      for (int i = 0; i < arrayCount; i++) { 
       System.out.print(array[i] + " "); 
      } 
      System.out.println("\n"); 
     } 
    } 

    private static boolean insertElement(BufferedReader br, int maxSize, 
      int[] array, int arrayCount) throws IOException { 
     if (arrayCount < maxSize) { 
      System.out.println("Enter Element for Insertion"); 
      array[arrayCount] = Integer.parseInt(br.readLine().trim()); 
      return true; 
     } else { 
      System.out.println("Max Limit Reached, Insertion not possible"); 
      return false; 
     } 
    } 
}