Beiträge von a9bejo

    Hallo,

    Warum muss die zugrunde liegende Datenstruktur denn unbedingt so ein Array sein (int[17][3])?

    Wenn Du ein gutes Beispiel fuer die Implementierung einer Hashtabelle suchst, kannst Du dir ja den sourcecode von java.util.HashMap anschauen.

    Code
    test = In.readString()
    System.out.print(test);

    leider etwas zu wenig information fuer mich. Ich weiss nicht von welchem Typ "ln" eine Instanz ist, oder in welchem context Du diesen code aufrufst.

    PS: die namen von referencen beginnen laut Java convention (fast) immer mit einem kleinbuchstaben. Also 'matrix', nicht 'Matrix'.

    Problem: How do I paint thick lines? patterns?

    The JavaTM 2D API provides extensive support for implementing line widths and styles, as well as patterns for use in filling and stroking shapes. See the 2D Graphics trail for more information on using the Java 2D API.
    (quelle)

    Das heisst du aenderst

    public void paint(Graphics gfx){...}

    in public void paint(Graphics2D gfx){...}

    und zeichnest dann mit den 2D bibliotheken:

    http://java.sun.com/docs/books/tut…okeandfill.html

    Zitat

    "Es ist nicht nur so üblich, es ist notwendig, equals() zu verwenden"

    ...Bei mir funktionierte das bis jetzt immer...

    Reiner zufall, weil viele VMs oft so optimieren, das die offensichtlich gleichen Strings nicht doppelt im Hauptspeicher abgelegt werden.

    Schau Dir mal das output von folgendem code an, da siehst Du warum man immer mit equals vergleichen muss.

    Code
    public class StringTests {
      public static void main(String[] args){		
        System.out.println("Hello".equals("Hello World".substring(0,5))); //=> true
        System.out.println("Hello" == "Hello World".substring(0,5)); //=> false
        System.out.println("Hello" == "Hello"); //=> true
        System.out.println("Hello".equals("Hello")); //=> true
      }	
    }


    Zu deinem eigentlichen Problem: Das wirst Du mit einfachem debugging leicht loesen koennen:

    Wenn Du so einen Code hast:

    Code
    ta_Ausgabe.setText(myCaesar.getCypher());

    und Du moechtest wissen, ob der Fehler in der TextArea oder in der getCypher methode liegt, ruf doch einfach zwei mal hintereinander die setText Methode aus und schau was nachher drinnen steht:


    Code
    ta_Ausgabe.setText("a");
    ta_Ausgabe.setText("b");
    
    
    System.out.println(ta_Ausgabe.getText());

    Jetzt weisst du, das es nicht die textarea sein kann. Also muss der fehler wohl im restlichen Code liegen:

    Code
    String s;
    s = myCaesar.getCypher()
    s = myCaesar.getCypher()
    System.out.println(s);

    Hier wird dann wohl auch nichts Unerwartetes passieren, denn deine getCypher methode laesst nicht viel Spielraum fuer Fehler. Logischer Schluss: Der Fehler liegt in deinem uebrigen code. Wo genau? Einfach den Algorithmus nachverfolgen nach jeder manipulation von cypher dessen Wert mit System.out.println aussgeben lassen. Dann weisst sehr schnell ganz genau wo dein Fehler liegt.

    Nachdem Java sowieso schreit, wenn man eine Variable uninitialisiert verwendet, glaub ich dass das auf null initialisieren nicht wirklich sinnvoll ist, wenn es nicht notwendig ist.

    Das trifft auf lokale Variablen zu. Instanzvariablen werden aber eben immer initialisiert. Die Frage, ob es verstaendlicher ist wenn man die Zuweisung extra angibt, ist da schon berechtigt.

    Ich initialisiere z.B. schon mal gerne explizit, wenn der Wert zwar dem default entspricht, aber eher zufaellig. D.h es gibt auch andere Werte, die hier logisch als default verwendet werden koennten.

    z.B.

    Code
    static int TIMEOUT = 0;  //seconds

    Interressant.

    Ich habe mal auf comp.lang.java.programmer nach dem Thema
    gesucht und das hier gefunden:


    quelle

    kennt jmd vll gute & günstige programmierkurse(java) hier in wien? wäre besser, wenn sie im sommer stattfinden, da ich noch eprog machen muss & leider noch nicht genug ahnung von programmieren habe.;)

    Ich kenne leider keinen guten Kurs. JohnFoo bietet hier schon seit laengerer Zeit Java Nachhilfe an, vielleicht ist das ja was fuer Dich.

    Allerdings bin ich der Meinung, dass es beim Einstieg in die Programmierung den meisten an der Geduld fehlt, sich ein gutes Lehrbuch durchzulesen. Die Theorie lesen und dabei praktisch ausprobieren ist sichert der schnellste Weg zum Ziel (und auch der billigste). Fragen stellen kannst Du ja jederzeit online (z.B. hier im Forum), und Du kannst mit dem Buch in Deinem eigenen Tempo lernen. Wikipedia und Google noch als zusaetzliche Quellen, und du hast viel mehr als dir ein Sommerkurs bieten kann.

    Fuer Tipps zu guten Buechern kannst du die Suchfunktion des Forums benutzen. Ich empfehle hier gerne How to think like a computer scientist. Ein gutes Buch, das sich nur um Java dreht ist Thinking in Java von Bruce Eckel.

    Wenn Du dich traust, kannst du auch Structure and Interpretation of Computer Programs lesen, das vielleicht beste Buch das jemals zu diesen Thema geschrieben wurde. Dieses Buch verwenden sie am MIT zur Einfuehrung, und ich wuerde es auf jeden Fall irgenwann lesen. Gleich als erste Lektuere waehre es mir aber fast ein wenig zu hart, und auch zu trocken.

    Ich hab mir damals meine PS2 gekauft, weil ich damit dem
    Hardwarerennen aus dem Weg gehen konnte. Ich musste
    nie upgraden und ich konnte mir noch 6 Jahre spaeter ein
    aktuelles Computerspiel kaufen, dass exakt fuer meine
    Hardware optimiert war.

    Ich fuerchte damit ist es vorbei. So heiss wie der Markt heute
    umkaempft wird, rechne ich schon bald wieder mit einer neuen
    Konsolengeneration. Schon jetzt gibt es fuer die XBox 360 ein
    zusaetliches HD-DVD Laufwerk.

    Ich wuensche mir ein Konsolenmonopol. :)

    Was den Wii betrifft stimme ich Saruman zu. Das ist eher fuer
    Arkade und Partyspiele, und eigentlich fuer eine ganz andere
    Zielgruppe gedacht.

    Bei allem, wo es um Realismus und Simulationen geht (Rollenspiele,
    Strategie, Sport, usw.) kommt der Wii nicht mehr so gut weg, und
    zwar weil der Kontroller und die Bewegungen beim Wii so eine grosse
    Rolle spielen.

    Bei der PS2 denke ich mir "Ich will mit diesem Basketball zum
    Korb dribbeln", und dass ich dabei den Controller benutze,
    passiert schon fast unbewust. Das eigentliche Spielvergnuegen
    findet im Kopf statt. Beim Wii haengt alles davon ab, wie
    realistisch meine tatsaechlichen Bewegungen im Spiel umgesetzt
    werden koennen. Das ist z.B. beim Basketball schon sehr schlecht
    moeglich.

    Natuerlich kann man den Wii-Kontroller auch wie einen ganz
    gewoehnlichen Controller verwenden. Aber dann spielt man auf
    einer sehr schwachen Hardware. Und gute Hardware bedeutet nicht
    nur bessere Grafik (die ist mir gar nicht so wichtig), sondern
    vor allem auch viel mehr Ressourcen fuer Artificial Intelligenz
    und Content.

    Ich bin sicher der Wii wird weiterhin ein grosser Erfolg sein, denn diese
    "andere Zielgruppe" ist groesser als die Summe aller bisherigen
    Computerspieler. Und es gibt auch sicher noch unzaehlige Ideen, wie
    man den Controller cool einsetzen kann. Wir haben einen Wii im Buero
    stehen, und das Ding macht auf jeden Fall Spass. Der Fokus wird aber
    sicher immer im Arkade Bereich liegen.

    hm, naja ich weis nicht ob das jetzt
    vielleicht etwas zu unwissend für das forum hier ist

    Nein, ist es nicht. In gewisser Hinsicht ist Unwissen eine von
    zwei moeglichen Voraussetzung dafuer, hier posten zu duerfen. :)


    aber bei einem array kann ich ohne
    große probleme auf alle gespeicherten daten zugreifen (zb.:
    testarray[i].pos < irgendwas - wenn testarray ein array von
    instanzen einer klasse ist) bei einer list habe ich folgendes
    problem: ich kann zwar objekte speichern aber tue mir gerade eben
    schwer die einzelnen werte des objektes einzeln auszulesen

    Das ist bei Listen nicht komplizierter als bei Arrays:


    (ist es in dem fall, dass ich einzelne werte aus den im array gespeicherten objekten auslesen und vergleichen will wirklich sinnvoller mit einer list zu arbeiten?)

    Ja. Nicht das es mit arrays nicht auch gehen wuerde, aber
    Collections sind vielseitiger. Du kannst z.B. von ihnen erben und
    methoden überladen, oder Du kannst eigene Collection entwerfen
    die sich dann nahtlos mit den anderen zusammen vertragen usw.
    Arrays sind schon brauchbar, aber eben Sonderfälle, und da es
    fuer diese Sonderfälle eigentlich keinen Nutzen mehr gibt, halte
    ich es fuer klüger, ganz auf sie zu verzichten.

    PS: bezüglich index - im grunde habe
    ich einen wert gemeint über den ich das objekt anspreche (vll ist
    index da der falsche ausdruck), wir vll klarer wo ich stehe mit
    der oben beschriebenen problemsituation

    Diese Datenstruktur heisst Dictionary (in Java Map), und die
    macht ihr auch in Algodat, gleich nach den Listen. Und du hast
    voellig recht: Wenn Du viel schreibst und direkten Zugriff ueber
    einen index brauchst, sind Maps sehr effizient (vor allem die
    Hashtabellen, in Java java.util.HashMap). Es kommt auch immer auf
    den jeweiligen Fall an. Wenn Du eine Liste von Daten hast an die
    Du immer nur Elemente anhaengst, und oft darueber iterierst, ist
    eine doppelt verlinkte Liste das effizienteste was es gibt.

    Allerdings muss man aber am Ende trotzdem auch immer noch sehr
    viel sortieren, weil eine sortierter Datensatz in vielen Faellen
    einfach vorteilhaft ist. Zum Beispiel um Daten geordnet
    anzuzeigen, oder schnell ein Minimum/Maximum berechnnen zu
    koennen.

    PS: Hier noch eine gute Einfuehrungin das java Collections Framework.

    http://java.sun.com/docs/books/tut…ions/index.html


    Im gleich am anfang wird von sortierverfahren gesprochen und dass diese ca 1/4 der "kommerziel benutzten rechenzeit" beanspruchen.

    Sortieren ist nach wie vor sehr wichtig, aber das sollte man
    schon dazu sagen: diese Studie ist, soweit ich mich erinnere,
    schon etwas aelter.

    In den meisten Faellen wird deutlich oefter gelesen als
    geschrieben, so 99:1. Nimm zum Beispiel dieses Forum hier und ueberleg
    dir, welche daten da abgespeichert werden und wie das Verhaeltnis
    schreiben <> lesen ist. Das ist meiner Erfahrung nach fast bei
    den meisten Datensaetzen so.

    Und was denn index betrifft: Ich weiss nicht wie du das gemeint hast "den
    index in einen unsortierten datensatz schreiben"
    Aber auch einen solchen index wirst Du wohl am ende durchsuchen muessen,
    was dann wieder sortieren bedeutet.

    zunaechst einmal: verwende statt eines vectors eine Liste, z.b
    ArrayList. Da ist kein wirklich wichtiger Unterschied dabei, aber
    vector == altes Ueberbleibsel aus der Javasteinzeit , ArrayList == neu.
    Es gibt auch noch die LinkedList. Die Unterschiede zwischen den Beiden
    macht ihr dann in Algodat gleich als naechstes nach dem Sortieren, wenn
    ich mich recht erinnere.

    Zu deiner eigentlichen Frage: Ich empfehle dir auf Arrays moeglichst ganz
    zu verzichten und nur noch Listen zu verwenden, aus zwei Gruenden:

    1. seit einigen Jahren werden die Collections in Java (Listen,
    Maps usw.) derart gut von den Compilern optimiert, dass es
    praktisch keinen nennenswerten Unterschied mehr macht, was du
    verwendest.

    2. Stelle niemals Performance ueber lesbaren Code, es sei denn du
    hast handfeste Zahlen vor der Nase, die belegen, dass dein Programm
    wegen genau diesem Stueck code nicht ausreichend performant ist.

    Collections sind in Java meiner Meinung nach leichter zu benutzen
    als Arrays: sie sind dynamisch und passen besser in die objektorientierte
    Struktur von Java, waehrend Arrays eher haessliche Sonderfaelle sind.

    Ich habe die gleichen Erfahrungen gemacht wie Chronatog.

    _why's Buch ist halt wie _why selbst: Lustig, intelligent aber auch total abgedreht.
    Es gibt ein Video von der letzten Railsconf, wo er mit seiner Band spielt. Das war so furchtbar, dass ich erwartet hab dass meine Soundkarte Selbstmord begeht.

    Das Pickaxe Book, wie man "Programming Ruby" auch gerne bezeichnet, ist wirklich die Bibel fuer Ruby. Auf die im Buch enthaltene Referenz kann ich aber gerne verzichten, denn da ist die online version wesentlich praktischer (immer aktuell und leichter zu durchsuchen).


    Abgesehen von dem Buch sollte man sich diese Seiten hier in Reichweite halten:

    http://www.ruby-doc.org/ => Alles wichte, was man an Dokumentation braucht. Da gibt es unter anderem auch die erste Version vom Pickaxe Book.

    http://raa.ruby-lang.org/ => Zusaetzliche Bibliotheken

    http://groups.google.de/group/comp.lang.ruby/topics => die community

    http://www.rubyquiz.com/ => Problemstellungen und verschiedene Loesungen, dokumentiert.

    http://rubyforge.org/ => Zum lernen muss man Code lesen. Hier gibt es den code.

    Mitliefern der Komponenten geht glaub ich nur
    wenn man eine Lizenz kauft

    Das ist definitiv nicht mehr so, da das JDK und die runtime ja
    mittlerweile unter der GPL v2 lizensiert sind:
    http://www.sun.com/software/opensource/java/faq.jsp

    Eine Möglichkeit wär Java WebStart, wo die
    leute das Programm einfach über eine Webseite beziehen. Webstart
    überprüft dann automatisch ob JRE installiert ist und holt dies auch
    nach wenn nötig.

    Das Problem mit JWS ist, dass das erst recht erst beim installieren
    der Runtime mitinstalliert wird. Diejenigen die gar keine Runtime installiert haben, koennen damit auch nichts anfangen.


    Zitat von AntiBit

    Wenn das haelt was es verspricht ist das ziemlich cool!

    Hallo

    Kannst du noch dazu sagen um was fuer eine Connection es sich bei Deinem Problem handelt?

    Hab gerade mal in der StandardAPI (1.6) geschaut und die Interfaces java.sql.Connection, java.net.UrlConnection, javax.management.MBeanServerConnection besitzen die von dir angegebenen methoden nicht.


    Meine Annahme ist derzeit, das jede der 3 methoden eine neue Instanz von einem java.io.DataInputStream erstellt.

    d.h. open openInputStream() ist dann einfach nur ein downcast:

    Code
    public InputStream openInputStream(){
      return this.openDataInputStream();
    }

    und openInputStreamReader() ist ein Wrapper:

    Code
    public InputStreamReader openInputStreamReader(){
      return new InputStreamReader(this.openDataInputStream());
    }

    D.h. ob du einen InputStreamReader zusammen mit einem InputStream oeffnest oder stattdessen zwei InputStreamReader sollte egal sein, weil eh immer ein DataInputStream dahintersteckt.

    Das die Methoden "open..." und nicht "get..." heissen laesst darauf schliessen, das wirklich bei jedem Aufruf immer ein neuer Stream instanziert wird.

    Wenn Du jetzt zwei Streams zu demselben Objekt aufmachst, ist es meiner Meinung nach von der Quelle abhaengig was dann passiert. D.h. vielleicht darf immer nur ein Stream offen sein, vielleicht laufen dann einfach zwei parrallel oder vielleicht bekommst du sogar beim zweiten Aufruf den selben stream zurueck wie beim ersten. Eventuell ist auch in der Spezifikation von deinem Connection objekt festgelegt, wie sich diese methoden zu verhalten haben.

    Aber wie schon gesagt, das kommt ganz darauf an was fuer eine Connection das ist bzw. wie sie spezifiziert ist.