2016-11-19 2 views
0
package com.cp.javapractice; 

import java.util.ArrayList; 
import java.util.Scanner; 

public class Cp { 
public static void main(String args[]) { 
    ArrayList al = new ArrayList(); 
    Scanner s = new Scanner(System.in); 
    String str = null; 
    str = new String(); 
    System.out.println("Enter the string which you want to remove the  duplicates"); 
    str = s.nextLine(); 
    String arr[] = str.split(" "); 
    for (int k = 0; k < arr.length; k++) { 
     al.add(arr[k]); 
    } 
    try { 
     for (int i = 0; i < arr.length; i++) { 

      for (int j = i + 1; j < arr.length; j++) { 

       if (arr[i].equalsIgnoreCase(arr[j])) { 
        al.remove(j); 
       } 
      } 
     } 
     System.out.println(al); 
     } 
    catch (Exception e) { 
     System.out.println(e); 
    } 
} 
} 

Ich werde die Wiederholung Worte insbesondere gegebene Zeichenkette vom Benutzer ersetzen. Also, ich spalte die angegebene Zeichenfolge mit Leerzeichen mit Split-Methode und in Array sowie in Arraylist.IndexOutOfBoundsException while-Schleife führt Java

Nach Iterate durch Array und überprüft die Bedingung ist gleich dann habe ich das in ArrayList entfernt. Aber beim Entfernen zeigt Index Out-of-Exception.

Dieser Code funktioniert für eine kleine Array-Größe, zeigt aber eine Ausnahme und gibt dabei eine große Anzahl an Array-Größen an. Ich habe Probleme, während ich die Zeichenfolge mit Array-Größe von 13 Wörtern gebe.

Hier ist mein voller Code.

+4

Dies ist eine gute Zeit zu lernen, wie man einen Debugger verwenden! – jdigital

+0

Sie haben die wichtigen Informationen ausgelassen: Die Ausnahme-Stack-Ablaufverfolgung (vollständig) und eine Angabe, welche Anweisung in Ihrem Code die Ausnahme auslöst. Bitte bearbeiten Sie Ihre Frage, um die fehlenden Informationen einzubinden. –

+0

Mögliches Duplikat von [IndexOutOfBoundsException] (http://stackoverflow.com/questions/4269153/indexoutofboundexception) – mx0

Antwort

0
for (int i = 0; i < al.size(); i++) { 

    for (int j = i + 1; j < al.size(); j++) { 

     if (al.get(i).equals(al.get(j)) { 
      al.remove(j); 
     } 
    } 
} 
+0

Warum haben Sie diesen toLowerCase-Conversion-Code entfernt? @VojtechRuzicka – PassionInfinite

+0

Sorry, mein Schlechter, es war unionentalion, wollte nur den Einzug korrigieren. –

+0

Ich habe meine Bearbeitung überprüft und betrifft nur Einrückungen. –

0

Die Ausnahme ist, weil Sie arr.length statt al.size() verwenden. Bei jeder Entfernung verringert sich die Größe der Arraylist al. Sie müssen also die Größe der Arraylist anstelle der Größe des Arrays in Betracht ziehen.

for (int i = 0; i < al.size(); i++) { // change arr.length to al.size() 

      for (int j = i + 1; j < al.size(); j++) { // change arr.length to al.size() 

       if (arr[i].equalsIgnoreCase(arr[j])) { 
        al.remove(j); 

       } 
      } 
     } 

empfehle ich Ihnen, würde HashSet und TreeSet zu überprüfen, die Duplikate zu entfernen Ihre Bemühungen reduziert.


Implementierung in HashSet:

import java.util.Arrays; 
import java.util.HashSet; 
import java.util.Scanner; 
import java.util.Set; 


public class Cp { 
public static void main(String args[]) { 

    Scanner s = new Scanner(System.in); 
    String str = null; 
    str = new String(); 
    System.out.println("Enter the string which you want to remove the  duplicates"); 
    str = s.nextLine(); 
    String arr[] = str.split(" "); 

    Set<String> ts = new HashSet<String>(Arrays.asList(arr)); // -> added only this line 

     System.out.println(ts); 

} 
} 
+0

Ja! Sets reduzieren Ihren Aufwand für die Bearbeitung von doppelten Werten. Guter Vorschlag. @SkrewEverything – PassionInfinite

+0

Es funktioniert. Danke. – Chitrapandi

+0

@Chitrapandi Dann markieren Sie bitte die Antwort als akzeptiert und schließen Sie die Frage. – SkrewEverything

0

Das Problem Ihre zweite Schleife ist. Startet bei i + 1. Aber ich bin von 0 bis -1. Also wird das Letzte ein j = Länge-1 + 1 sein, was jenseits der Array-Länge ist.

ändern, so die erste for-Schleife:

for(int i=0;i < arr.length-2;i++) 
Verwandte Themen