carookee - group communication for you
Home / JavaForum / Beginner
Infos   |   Features   |   Gold-Edition   |   Kundenservice   
java
  Übersicht
  Forum
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
  Mitglieder
LOGIN





· Passwort vergessen
· Kostenlos anmelden
  Information
  Demo
  Features
  Im Vergleich
  Anmeldung
SUCHE
Beiträge, Foren oder Verfasser finden:
  Kundenservice
  Impressum
  Datenschutz
  AGB
Status
4.576 User online
0 User eingeloggt
 

Beiträge
   Antworten     Neuer Beitrag    

Beitrag 960 von 2963 (32%) |<   <   >   >|

Autor Harald Faber
Datum 01.03.04, 14:48
Betreff Re: Arrays.sort


    Zitat:
    Hallo,

    ich schreibe gerade ein kleines Programm, das folgendes machen soll:
    Es liest aus zwei verschiedenen Tabellen EMail-Adressen aus.
    An die eMail-Adressen der einen Tabelle sollen eMails verschickt werden, aber nur wenn diese Adressen in der anderen Tabelle nicht vorhanden sind.
    Und so wollte ich das lösen:

    //Auslesen der Adressen aus der ersten Tabelle
    Statement stmtUnsub = con.createStatement();
    String queryUnsub = "select Kunde.EMail from Global.Unsubscribe, vt_" + VideothekID + ".Kunde where Global.Unsubscribe.EMail = vt_" + VideothekID + ".Kunde.Email and vt_" + VideothekID + ".Kunde.Email <> ''" ;
    ResultSet rsUnsub = stmtUnsub.executeQuery(queryUnsub);
    anzUnsub = Integer.parseInt(rsUnsubCount.getString(1)) ;
    String[] UnsubArray = new String[anzUnsub+1] ;
    rsUnsub.first() ;
    for(i=1;i<=anzUnsub;i++) {
    UnsubArray[i] = rsUnsub.getString(1) ;
    System.out.println(UnsubArray[i].toString()) ;
    rsUnsub.next() ;
    }
    Wie man sieht speicher ich die komplette Tabelle in einem Array, um leichter damit arbeiten zu können.

    Auf die gleiche Weise hole ich mir die Daten aus Tabelle 2.

    Nun wollte ich mittels Arrays.binarysearch(UnsubArray,"[email protected]) prüfen, ob die angegebene Adresse in dem Array vorhanden ist und wenn ja, soll an diese Adresse keine Mail geschickt werden.
    Mache ich das so, präsentiert mir das Programm eine negative Zahl (Beispiel -5), als sei die Adresse nicht in dem Array enthalten, obwohl ich ganz genau weiß, dass sie es sein muss.
    Dann habe ich gelesen, dass es besser ist, das Array vorher mittels Arrays.sort(UnsubArray) zu sortieren.
    Bei dieser Zeile erhalte ich die Fehlermeldung:
    java.lang.NullPointerException
    NullPointer bedeutet doch, dass er auf ein leeres Element zeit. Das verstehe ich aber nicht so ganz. Das Array ist doch vorhanden und auf jeden Fall auch mit Daten gefüllt.
    Kann mir da jemand weiterhelfen?
Woher die NullPointer kommt, sehe ich im Moment nicht. Debugger und Exception-Ausgabe sollten es Dir eigentlich zeigen.
Bezüglich des Prüfens auf Vorhandensein bevorzuge ich HashSets/HashMaps. In Deinem Fall reicht ein HashSet. Sie sind üblicherweise schnell, und man muss sie nicht wie Arrays von vornherein mit einer festen Größe dimensonieren. Bei mir würde das so aussehen:

//Auslesen der Adressen aus der ersten Tabelle
Statement stmtUnsub = con.createStatement();
String queryUnsub = "select Kunde.EMail from Global.Unsubscribe, vt_" + VideothekID + ".Kunde where Global.Unsubscribe.EMail = vt_" +
VideothekID + ".Kunde.Email and vt_" + VideothekID + ".Kunde.Email <> ''" ;
ResultSet rsUnsub = stmtUnsub.executeQuery(queryUnsub);
anzUnsub = Integer.parseInt(rsUnsubCount.getString(1)) ;
HashSet hsEmails = new HashSet();
rsUnsub.first() ;
for(i=1;i<=anzUnsub;i++)
{
    // Hier werden jetzt die Emails ins HashSet reingeworfen:
    hsEmails.add(rsUnsub.getString(1));
    
    rsUnsub.next() ;
}


Prüfen, ob eine Email-Adresse schon drin ist, geht dann einfach mit

if ( hsEmails.contains(dieZuPruefendeEmailadresseAlsString) )
{ // Email bereits vorhanden
}


Alternativ geht das ganze auch mit ArrayLists statt HashSet, hätte den Vorteil, dass Du dann in der Tat recht einfach sortieren kannst. Da macht man üblicherweise über

Collections.sort(myArrayList);

Vorausgesetzt, die Objekte in der ArrayList sind Comparable - sind Strings aber. Ansonsten hättest Du Dir selbst einen eigenen Comparator mit einer compareTo-Methode schreiben müssen. Ist wie gesagt in diesem Fall nicht nötig.
Ich hofffe, das hilft Dir erst mal weiter.


Diskussionsverlauf:
Arrays.sort
    Re: Arrays.sort
        Re: Arrays.sort

 Auf diesen Beitrag antworten
 Neuen Beitrag verfassen


|<   <   >   >|

                                                                                                                                                                                                                           

Impressum  · Datenschutz  · AGB  · Infos  · Presse
Ein modernes Forum: teamturn.com