Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: Problem mit struct in Java

  1. #1
    Registrierter Benutzer
    Registriert seit
    13.02.2006
    Beiträge
    40

    Problem mit struct in Java

    Hi zusammen,

    in Java hab ich mir ein class definiert:
    Code:
    public class Point{
     int x;
     int y;
     int z;
    }
    um ein 3D Punkt zu definieren. Dann in einer anderen class,
    will ich ein Vector von 3D Punkten definiern:

    Code:
    public class Projection
    .....
    .....
      public static void main(....){
        Point point = null;
        Vector<Point> points = null;
    
        point.x = 10;
        point.y = 20;
        point.z = 30;
    
        points.add(point);
      }
    }
    das Problem ist, das ich nicht verstehen kann, warum ich eine NullPointerExeption bekomme. Was kann da falsch sein?

    Danke,
    Dime

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Du setzt den Pointer "point" auf "null". Ist doch logisch ist der nachher null und du kriegst eine Nullpointerexception...

    Besser wäre:
    Code:
    Point point = new Point();
    Dasselbe auch für einen Vektor.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zu spät Ach ja: Erstes Codestück ist sehr schlechter Programmierstiel für Java: Variablen in einer Klasse NIE public machen (sondern über set/get Methoden). Der Grund: Mittels set/get hast du eine viel bessere Kontrolle, was mit deinen Variablen passiert, kannst überprüfen, ob eingegebene Werte gültig sind,...

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Naja, für eine Point-Klasse die drei Ints speichert... - das sehe ich dann doch etwas Pragmatischer.

    Für einen einzelnen Int benutzt du ja auch keine get/set Methoden, oder?

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer
    Registriert seit
    13.02.2006
    Beiträge
    40
    Hi,

    ich hab auch mit Point point = new Point() probiert,
    hatte auch nicht funktioniert, und Set/Get finde ich nicht so gut für nur 3 variablen,
    ausserdem brache ich nur eine struct und keine richtige klassen und will keinen speicher verschwenden
    Geändert von dimevit (09-02-2008 um 10:58 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Zitat Zitat von dimevit Beitrag anzeigen
    ich hab auch mit Point point = new Point() probiert, hatte auch nicht funktioniert,
    vergiss nicht den Konstruktor des Vector, so wie es peschmae schon geschrieben hat. Ein per null-Zuweisung nicht initialisiertes Objekt kannst Du eben nicht verwenden.

    Zitat Zitat von dimevit Beitrag anzeigen
    und Set/Get finde ich nicht so gut für nur 3 variablen, ausserdem brache ich nur eine struct und keine richtige klassen und will keinen speicher verschwenden
    Denke nicht in C, denke in Java und denke objektorientiert. Was ist, wenn Du die Point-Klasse später (z. B. für eine Klasse PointInCircle, die nur Punkt-Koordinaten innerhalb eines vorgegebenen Radius enthalten soll) als Basisklasse verwenden willst? Du kannst die Sichtbarkeit in abgeleiteten Klassen nicht wieder einschränken. Du verbaust Dir mit dieser Art von Programmierstil viele Möglichkeiten sinnvollen Code-Recyclings.

    Just my 0.02

    Jan

  7. #7
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von jan61 Beitrag anzeigen
    Du verbaust Dir mit dieser Art von Programmierstil viele Möglichkeiten sinnvollen Code-Recyclings.
    Wenn sich das Konstrukt als praktisch erweisen sollte, hat man die getter/setter schnelle drin.

    Ansonsten sollte man kein overkill betreiben, sonst gewinnt die Konkurrenz:

    http://www.projectcartoon.com/cartoon/644

    so long,
    BlueJay
    Eigentlich ganz einfach, wenn man's weiss!

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Zitat Zitat von BlueJay Beitrag anzeigen
    Wenn sich das Konstrukt als praktisch erweisen sollte, hat man die getter/setter schnelle drin...
    ja, und die public int's auch noch. Viel Spaß beim Refactoring.

    Jan

  9. #9
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Ja, also nachträglich einbauen würde ich get/set-Methoden jetzt lieber auch nicht. Hab ich auch schon gemacht - gehört zu den langweiligsten Sachen die ich kenne

    Ich meine: Wenn man von Anfang an sicher ist dass man nicht später doch noch get/set möchte, einem die einfacherere Schreibweise wichtig ist und/oder die Performance extrem wichtig ist (kann bei einer Point-Klasse durchaus mal passieren; wenn man ein paar Millionen Punkte hat...), dann lässt man die Methoden besser sein. Sonst nicht.

    Oder ihr benutzt einfach alle C++; da macht man ein inline davor und die Performance-Frage ist geklärt...

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  10. #10
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von jan61 Beitrag anzeigen
    ja, und die public int's auch noch.
    So public sind die auch nicht. Ausserhalb des eigenen packages ist es mit Zugriff Sense, jedenfalls nach obiger Syntax.
    Innerhalb der Bibliothek hat man dann noch was zum Geschwindigkeits-Optimieren, z.B. bei Sprites.
    Eigentlich ganz einfach, wenn man's weiss!

  11. #11
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von peschmae Beitrag anzeigen
    Oder ihr benutzt einfach alle C++; da macht man ein inline davor und die Performance-Frage ist geklärt...
    ... und wenn ihr euch dann gerade an die C++-Bibliotheken gewöhnt habt und endlich damit jonglieren könnt, werden die in der nächsten Version abgeschafft oder bis zur Unkenntlichkeit verunstaltet.

    Aus diesem Grund verfolge ich interessiert den Werdegang des GCJ.
    Eigentlich ganz einfach, wenn man's weiss!

  12. #12
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Naja, selber schuld wenn du die falschen Bibliotheken verwendest - das ist ja nicht der Fehler von C++ :-p

    GCJ habe ich schon lange abgeschrieben.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  13. #13
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von peschmae Beitrag anzeigen
    GCJ habe ich schon lange abgeschrieben.
    Warum? Kneifen die vorm AWT?

    so long,
    BlueJay
    Eigentlich ganz einfach, wenn man's weiss!

  14. #14
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Nun ja. Suns Java ist dank JIT halt schneller; oder wars zumindest als ichs getestet hab...

    Kommt natürlich auch sehr darauf an was genau man damit macht.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  15. #15
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von peschmae Beitrag anzeigen
    Nun ja. Suns Java ist dank JIT halt schneller;
    JIT ist sauschnell, steckt C++ in den Sack, aber erst nach so 20 - 40s Anlaufzeit. Meine stille Hoffnung war so ein AOT-Compiler, der einen ähnlich schnellen Code fabriziert, aber das eben von Anfang an.
    Eigentlich ganz einfach, wenn man's weiss!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •