2016-05-17 14 views
0

Wie entferne ich doppelte Zahlen in ArrayList und ersetze sie durch neue?Entfernen und Ersetzen von Duplikaten in ArrayList

Ich möchte die Zahlen ohne sie zu kopieren drucken.

Dies ist mein Code:

import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.Set; 
import javax.swing.JOptionPane; 

public class Test { 
    public static void main(String[] args) { 
     ArrayList<Integer> al = new ArrayList<Integer>(); 

     int opt = Integer.parseInt(JOptionPane.showInputDialog("How many numbers?"); 
     for (int i=0 ; i < opc ; i++) { 
      al.add(Integer.parseInt(JOptionPane.showInputDialog("Which numbers?"))); 
     } 

     Set<Integer> s = new HashSet<>(); 
     for (Integer d : al){ 
      if (s.add(d) == false) 
       JOptionPane.showMessageDialog(null,"The number " + d + " was duplicated in position " + al.lastIndexOf(d)); 
       JOptionPane.showMessageDialog(null,"Replace new number"); //This is where I would like to replace the numbers if possible 
      } 
     JOptionPane.showMessageDialog("Your numbers without duplicates: "); //This is where it would print 
     } 
    } 
} 
+0

Sie haben bereits einige Codierung es scheint. Was ist das Problem jetzt? Was funktioniert nicht? Was ist Ihre Erwartung und was ist Ihr aktueller Output? –

+0

Ersetzen durch was? – shmosel

+0

Sagen wir, ich möchte 4 Zahlen. '3,4,3,2' und ich möchte die zweite' 3' ersetzen, also sollte es 'Ersetzen neue Zahl' sagen und ich füge eine' 7' hinzu – MeeJessicaaa

Antwort

0

Eindringen in doppelte Nummern, wenn der Benutzer sich eingibt, anstatt zu prüfen und zu einem späteren Zeitpunkt zu ersetzen.

Tun Sie es in diesem Ort:

for (int i=0 ; i < opc ; i++) { 
    al.add(Integer.parseInt(JOptionPane.showInputDialog("Which numbers?"))); 
} 

Chceck, wenn eine Nummer bereits vorhanden ist, wenn ja, dann für ein anderes fragen nicht dupliziert, wenn ja dann für die nächste Nummer hinzufügen und fragen:

for (int i=0 ; i < opc ; i++) { 
    int myNumber = Integer.parseInt(JOptionPane.showInputDialog("Which numbers?")); 
    while(true){ 
     if(! al.contains(myNumber)) 
      al.add(myNumber); 
      break; 
     } 
     myNumber = Integer.parseInt(JOptionPane.showInputDialog("This number is a duplicate, enter another number again")); 
    } 
} 


======== EDIT ==================

Ich habe das Beispiel korrigiert. Es fehlt { nach if in dem oben (zurück) ein:

public class MmuClass { 

    public static void main(String... wwwx) { 
     List<Integer> lst = Arrays.asList(4, 2, 6, -6, 9); 

     ArrayList<Integer> al = new ArrayList<Integer>(); 

     for (int i = 0; i < 5; i++) { 
      int myNumber = Integer.parseInt(JOptionPane.showInputDialog("Which numbers?")); 
      while (true) { 
       if (!al.contains(myNumber)) { 
        al.add(myNumber); 
        break; 
       } 
       myNumber = Integer.parseInt(
         JOptionPane.showInputDialog("This number is a duplicate, enter another number again")); 
      } 
      al.stream().forEach(System.out::println); 
     } 
    } 
} 
+0

Es macht Sinn, ich habe es getestet, aber es gilt immer als ein Duplikat. Ich gebe die erste Nummer ein und es sagt bereits 'Diese Nummer ist ein Duplikat, gib eine andere Nummer wieder ein ' – MeeJessicaaa

+0

Es gab einen Fehler - fehlendes' {'- ich habe das Beispiel korrigiert und die Antwort aktualisiert. – krokodilko

Verwandte Themen