2016-04-07 27 views
-1

Ich muss ein Programm schreiben, das für ein gegebenes Array von Ints alle seine Elemente ausgibt, aber jeden Wert nur einmal, ohne Wiederholungen. Das ist mein Tutor sagte. Ich stimme zu, dass es mehrere Beispiele gibt, aber ich habe spezielle Bedingungen wie:Nummer aus Array entfernen

Erstellen Sie keine Hilfsarrays, Sammlungen oder Strings!

Verwenden Sie keine Klassen aus anderen Paketen als dem Standard java.lang.

Ich habe so hier nicht so lange Java studiert ist, was ich getan habe:

public class Third { 

    public static void main(String[] args) { 
     int[] p = {5, 2, 2, 5, -1, 5, 12, 2, 5, 44, 12, 9}; 
     remove(p); 
    } 

    static public void remove(int[] a) { 

     int min = Integer.MIN_VALUE; 

     for (int i = 0; i < a.length; i++) { 
      for (int j = i + 1; j < a.length; j++) { 
       if (a[i] == a[j]) { 
        a[i] = min; 
       } 
      } 
     } 

     for (int j = 0; j < a.length; j++) { 
      if (a[j] != min) { 
       System.out.println(a[j]); 
      } 
     } 

    } 

} 

Mir ist klar, dass dies nicht effizient ist, weil es nicht in der Lage ist int der Minimalwert zu drucken. Gibt es einen anderen Weg, es richtig zu machen?

+0

Also wollen Sie im Grunde Duplikate an Ort und Stelle entfernen? Das Problem, das Sie mit dem minimalen Wert haben, ist, dass Ihnen eine Spezifikation fehlt - was werden Sie mit den leeren Räumen tun? Sie müssen einen Wert haben, der ein Duplikat sein muss, wenn es mehr als einen gibt ... –

+0

Niemals mehr Informationen in Kommentare einfügen; Aktualisiere stattdessen deine Frage. – GhostCat

Antwort

0

Da Sie gesagt haben, dass Sie die Elemente des Arrays nur einmal drucken wollen, aber Sie können keine Strukturen oder andere Arrays verwenden, um das zu erreichen, ist Ihre beste Strategie einfach das Array zu scannen und nach Elementen zu suchen gleichen Wert aus dem Index nach vorne und nur drucken, wenn Sie keine gefunden haben.

Zum Beispiel: für das Array {5, 2, 2, 5, -1, 5, 12, 2, 5, 44, 12, 9}, wenn Sie auf dem ersten 5 anschauen, werden Sie drei weitere Fünfer auf der rechten Seite sehen, so dass Sie nichts gedruckt wird, aber wenn man in diesem vierten 5 schau mal, da werde sei nicht und du wirst es ausdrucken. Wenn Sie zum Beispiel -1 sehen, sehen Sie rechts nichts anderes -1, und Sie werden es ausdrucken.

public static void main(String[] args) { 
    int[] p = {5, 2, 2, 5, -1, 5, 12, 2, 5, 44, 12, 9}; 
    remove(p); 
} 

static public void remove(int[] a) { 
    for (int i = 0; i < a.length; i++) { 
     boolean found = false; 
     for (int j = i + 1; j < a.length; j++) { 
      if (a[i] == a[j]) { 
       found = true; 
       break; 
      } 
     } 
     if (!found) 
      System.out.println(a[i]); 
    } 

} 

Und die Ausgabe für Ihren Array wird:

-1 
2 
5 
44 
12 
9 

Jedes Element wird nur einmal

gedruckt hier
+0

Vielen Dank, Sie haben meine Frage beantwortet! – cemicel

0

Basierend auf Ihrer Frage i Lösung ist bereitstellt. In dieser ersten sortiere ich array in aufsteigender Reihenfolge, dann drucke ich aktuellen Index a[i], wenn es nicht gleich nächsten Index a[i+1] ist.

Programm:

int a[] = { 5, 2, 2, 5, -1, 5, 12, 2, 5, 44, 12, 9}; 
     int temp = 0; 

     for (int i = 0; i < a.length; i++) { 

      for (int j = i; j < a.length; j++) 
       if (a[i] > a[j]) { 
        temp = a[i]; 
        a[i] = a[j]; 
        a[j] = temp; 

       } 

     } 

     for (int i = 0; i < a.length - 1; i++) { 
      if (a[i] != a[i + 1]) { 
       System.out.println(a[i]); 
      } 
      if (i == a.length - 2) 
       System.out.println(a[i + 1]); 

     } 

Ausgang:

-1 
2 
5 
9 
12 
44 

Hoffe, es wird Ihnen helfen.