Kugel mittelpunkt setzen prob



  • aja also muss ich noch irgendwie Punkt= new Kugel(); unterbringen oder wie?Sorry aber bin noch ein ziemlicher Laie 😃



  • Naja nein, du musst in deiner Methode SetMitte ein Punkt objekt erstellen. Oder du erzeugst ein Kugelobjekt was gleichzeitig ein Punkt objekt erzeugt. Wobei ich eh die Punkt klasse aus der Kugelklasse rausnehmen würde. Lies dir lieber nochmal ein Tutorial zur Objekterzeugung und verwendung durch 😉



  • Könntest du mir liebenswerter Weise einmal zeigen wie ich es machen soll?Bin grad echt überfordert 😞



  • ahh, jetzt hab ich es gerafft!



  • Naja eine möglichkeit wäre :

    public void SetMitte(...)
    {
      Punkt p = new Punkt();
      p.mittelpunkt.a = 100;
    }
    

    Wie gesagt, es wäre besser wenn du erstmal was verstehst wie man objekte erzeugt und besonders warum man das macht.



  • ja jetzt ging es, nur jetzt bekomm ich beim kompilieren keinen Fehler mehr, aber beim ausführen folgendes...
    Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object
    at aufgabe3.Kugel.SetMitte (Int32 mx, Int32 my, Int32 mz) [0x00000]
    at aufgabe3.Kugel.Main () [0x00000]



  • -.- Wie sieht denn dein Code nun aus?

    http://openbook.galileocomputing.de/csharp/ Attacke!



  • using System;
    namespace aufgabe3
    {
    class Kugel
      {
      public class Punkt
       {public int a;
        public int b;
        public int c;
    	public Punkt mittelpunkt;
       }
      public double radius;
    
      public void SetMitte (int mx, int my, int mz)
       {
       Punkt help= new Punkt();
       help.mittelpunkt.a=mx;
       help.mittelpunkt.b=my;
       help.mittelpunkt.c=mz;
       return;
       }
    
     public  void SetRadius (double r)
       {
       radius= r;
       return;
       }
    
      public double Oberflaeche()
       {double ofl;
       const double PI = 3.141592;
       ofl= 4.0*PI*radius*radius;
       return ofl;
       }
    
      public double Volumen()
       {double vol;
       const double PI = 3.141592;
       vol= 4.0/3 *PI*radius*radius*radius;
       return vol;
       }
    
      public static void Main ()
       {
       Kugel ball;
       ball = new Kugel();
       ball.SetMitte (1,2,3);
       ball.SetRadius (41.2); // in cm
       Console.WriteLine ("Oberflaeche des Balls: " + ball.Oberflaeche());
       Console.WriteLine ("Volumen des Balls: " + ball.Volumen());
       }
      }
    }
    


  • Hmm ist ja ganz klar, deine "mittelpunkt" REferenz ist nicht initialisiert.

    help.mittelpunkt = new Punkt();
    dann sollte es gehen. Aber du solltest das Design deiner klasse nochmal überdenken.



  • aja, ich dachte wenn ich help als neuen Punkt initialisiere, wird dann mittelpunkt automatisch mitinitialisiert.Echt vielen dank, werde mir mal dein tutorial über die ferien zu Gemüte ziehen



  • public class Punkt
       {public int a;
        public int b;
        public int c;
        public Punkt mittelpunkt;
       }
    

    das dürfte in einer Rekursion enden



  • Nein. Solange er nicht im Ctor von Punkt, mittelPunkt initialisiert.



  • Nichtsdestotrotz ist es "Blödsinn", daß ein Punkt einen Mittelpunkt hat, sondern die Kugel sollte den Mittelpunkt als Member haben, d.h.

    class Kugel
    {
      public class Punkt
      {
        public int a;
        public int b;
        public int c;
      }
      public Punkt mittelpunkt;
      public doule radius;
    

    Und dann wäre auch die Eingangsfrage ganz einfach zu klären gewesen.

    P.S. Warum hast du verschiedene Datentypen für Koordinaten (int) und Radius (double)???



  • ...und allgemein würde ich die Punktklasse nicht in die Kugelklasse einbetten da dessen Exemplare sicherlich auch ohne Kugel dienlich sind.


Anmelden zum Antworten