Der Programmier-Thread

Planet

50% water, 50% air, the glass is always full!
PSN-Name: PlanetJumble
#61
Aber in Smalltalk gibt es z.B. keine Zugriffsmodifier, und du weisst bestimmt welche Rolle Smalltalk in der Geschichte der OOP Sprachen gespielt hat.
Smalltalk behandelt zumindest Instanzvariablen als private members. Und du weisst bestimmt auch, dass alle objektorientierten Sprachen, die von Smalltalk gelernt haben, inzwischen Zugriffsmodifizierer benutzen. Und darüber hinaus weißt du bestimmt auch, welchen Stellenwert Smalltalk in der Softwareentwicklung heute hat... ;)

Python hat auch keine Zugriffsmodifier... dort basiert vieles dann eher auf Konventionen (z.B. Underscore vor die Methodennamen) und nicht auf Sprachfeatures.
Ich sehe da nicht den kategorischen Unterschied zwischen Namenskonventionen und Schlüsselworten. Meiner Auffassung nach ist das ein und das selbe, nämlich ein Zugriffsmodifikator.

Auch finde ich Objektorientierung ganz am Anfang nicht relevant fuer einen Anfaenger. Die Leute sollten eher erst mal lernen wie ein Computer funktioniert, was Variablen, Fallunterscheidungen und Schleifen sind -- Funktionen schreiben koennen, ohne Klassen schreiben zu muessen (!) -- und erst dann kann man ueber Konzepte wie OOP nachdenken...
Da stimme ich dir zu, weswegen diese ersten Schritte in (vernünftigen) Java-Anfängerguides auch in einer main-Methode abgehandelt werden. Dass man eine Klassendeklaration darumbasteln muss, sollte auch keinen überfordern, das kann man für den Anfang einfach so hinnehmen. Und dann handelt man diese ersten Lernschritte in einer monolithischen main-Methode ab, bis man dann mit Methoden anfängt (die dann übrigens auch noch keine Zugriffsmodifikation brauchen).

Kurz: es liegt nicht an der Sprache, sondern am Lehrer/Tutorial.

evtl. waere es besser mit funktionaler Programmierung anzufangen, weil es sauberer und logischer ist wenn man nur mit mathematischem Wissen von der Schule daherkommt.
Dann verwirrt man die Anfänger mit Klammer-Clustern und einem Konzept, welches später so gut wie keine Praxisrelevanz hat. Es ist sicher sinnvoll, später im Grundstudium so eine Sprache einzusetzen, um mal eine andere Sicht kennenzulernen, aber zum Start? IMHO neiheihein!

Ist natuerlich alles IMHO.
dito! :]

Am Ende bleibt es eh egal -- jemand der sich wirklich fuer Programmierung interessiert, muss sich sowieso alles mal anschauen und alles irgendwie lernen.
Zumindest sollte man sich hüten, ein One-Trick-Pony zu werden. Wer nur Java lernt, dafür aber intensiv, kriegt nicht den Blick "zwischen die Zeilen" und wird zu unflexibel.
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
#62
OMG, ihr wisst ja noch, dass ich auf einmal mein Programm nicht mehr starten konnte. Hab das ganze also hier hochgeladen und mir gedacht, dass der Lehrer mir halt helfen soll. Und heute lade ich das in Informatik runter und was ist? Es läuft tiptop...Ohne eine einzige Veränderung :ugly:
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
#63
Hab mal wieder nen Problem mit BlueJ...Ja ich weiß, mal was ganz neues. Also das ganze ist schon weiter fortgeschritten und mittlerweile kann man das ganze zu zweit spielen. Jetzt wollte ich aber das nervige Flimmern von der Kugel wegbekommen, mir fällt aber keine Lösung ein. Das Ding muss ja immer neu gezeichnet und gelöscht werden, i-einen Weg drumherum müsste es doch geben. Aber kA, vll i-wie was mit zwei Ebenen oder so..weiß der Teufel xD

2. Problem. Will man zu zwei spielen und die Balken bewegen, muss man die Taste auf der Tastatur immer und immer wieder neu drücken. Gedrückt halten geht nicht. Liegt wohl daran, dass es nur einen Tastaturpuffer gibt, aber hat da einer ne Idee wie man das lösen könnte? Muss ja i-wie. Richtige Spiele laufen ja damit.

Und dann das letzte Problem, was zugegebenermaßen eher ein mathematisches ist. Momentan prallt die Kugel zwar vom Balken der Spieler ab, aber nur wenn sie direkt auf den Balken auftrifft. Wenn sie ihn aber nur i-wie seitlich andötscht, sieht es so aus als ob sie hindurchfliegt.Wollten den Ball also in mehrere Bereiche aufteilen und abfragen, wo und wie er auftrifft. Da unser Ball nen Radius von 10 hat, wollten wir den in 8 Bereichte mit 2,5 Pixeln aufteilen. Problem ist jetzt aber, wir müssen ja auch die horizontale Position kennen. Nur wie kommt man daran? im Kreis ist das ja etwas schwieriger. Wollten das über Sinus und so weiter machen, aber geht nicht. Vllt kennt da jemand noch ne Möglichkeit. Hoffe ihr versteht, was mein Problem ist.

Ahja, mein Infolehrer konnte mir bei keinem der Probleme helfen :D

Hier mal die drei Klassen des Programms

Spieler1:(sind eig die Balken)
Code:
import sum.kern.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Spieler1 extends Stift
{
    // Objekte
    Bildschirm derBildschirm;
    // Konstruktor
    public Spieler1(Bildschirm b)
    {
        super();
        derBildschirm = b;
    }

    // Dienste
    public void zeichneBalken()
    {
        zeichneRechteck(20,75);
    }
    public void loescheBalken()
    {
        radiere();
        zeichneRechteck(20,75);
        normal();
    }
    public void hoch()
    {
       if (vPosition()>0)
         {
            loescheBalken();
            dreheUm(90);
            bewegeUm(10);
            dreheUm(-90);
            zeichneBalken();
          }
          else
          {
           loescheBalken();
          dreheUm(-90);
          bewegeUm(0.1);
          dreheUm(90);
          zeichneBalken();
        }         
    }
    public void runter()
    {
        if(vPosition()<(derBildschirm.hoehe()-50))
        {
          loescheBalken();
          dreheUm(-90);
          bewegeUm(10);
          dreheUm(90);
          zeichneBalken();
        }
        else
        {
            loescheBalken();
            dreheUm(90);
            bewegeUm(0.1);
            dreheUm(-90);
            zeichneBalken();
        }
    }    
}
Kugel:
Code:
import sum.kern.*; 
import sum.werkzeuge.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Kugel extends Stift
{
    // Bezugsobjekte
    double a = 0.05;
    Rechner meinRechner;
    Bildschirm derBildschirm;
    // Attribute

    // Konstruktor
    public Kugel(Bildschirm b)
    {   
        super();
        meinRechner = new Rechner();
        derBildschirm = b;
    }

    // Dienste
    public void zeichneKugel()
    {
        zeichneKreis(10);
    }
    public void loescheKugel()
    {
        radiere();
        zeichneKreis(10);
        normal();
    }
    public void Richtung()
    {
        dreheBis(meinRechner.ganzeZufallszahl(-45,45));
    }
        
    public void Bewegung()
    {
        zeichneKugel();
        loescheKugel();
        bewegeUm(a);
        zeichneKugel();
    }
    public void Kollision(double pos,double pos2)
    {
        if(hPosition()<40 && vPosition() > pos && vPosition() < (pos+75) )
        {
            dreheUm(180-2*winkel());
        }
        if(hPosition()>600 && vPosition() > pos2 && vPosition() < (pos2+75) )
        {
            dreheUm(180-2*winkel());
        }
        else if(hPosition()<10 || hPosition()>630)
        {
            loescheKugel();
            bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
            Richtung();
        }
        else if(vPosition()>(derBildschirm.hoehe()-10))
        {
            dreheUm(360-2*winkel());
        }
        else if(vPosition()<10)
        {
            dreheUm(360-2*winkel());
        }

            
    }
}
Hauptprogramm(Hier wird dann das ganze Programm ausgeführt):
Code:
import sum.kern.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Hauptprogramm
{ 
    boolean running = true;
    // Objekte
    Kugel dieKugel;
    Bildschirm derBildschirm;
    Tastatur dieTastatur;
    Spieler1 derBalken;
    Spieler1 derBalken2;
    // Konstruktor
    public Hauptprogramm()
    {
        derBildschirm = new Bildschirm(640,480);
        dieKugel = new Kugel(derBildschirm);
        dieTastatur = new Tastatur();
        derBalken = new Spieler1(derBildschirm);
        derBalken2 = new Spieler1(derBildschirm);
    }

    // Dienste
    public void fuehreAus()
    {
        derBildschirm.nachVorn();
        derBalken.bewegeBis(10,300);
        derBalken2.bewegeBis(610,300);
        dieKugel.bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
        dieKugel.Richtung();
        while ( running = true)
        {
            dieKugel.Kollision(derBalken.vPosition(),derBalken2.vPosition());
            dieKugel.Bewegung();
            derBalken.zeichneBalken();
            derBalken2.zeichneBalken();
            if (dieTastatur.wurdeGedrueckt())
            {
                switch (dieTastatur.zeichen())
                {
                    case 'w':derBalken.hoch();break;
                    case 's':derBalken.runter();break;
                    case Zeichen.PFEILOBEN :derBalken2.hoch();break;
                    case Zeichen.PFEILUNTEN :derBalken2.runter();break;
                }
                dieTastatur.weiter();
            }
            
            
    }
    }
}
 
PSN-Name: chrizeliq
#64
Hab mal wieder nen Problem mit BlueJ...Ja ich weiß, mal was ganz neues. Also das ganze ist schon weiter fortgeschritten und mittlerweile kann man das ganze zu zweit spielen. Jetzt wollte ich aber das nervige Flimmern von der Kugel wegbekommen, mir fällt aber keine Lösung ein. Das Ding muss ja immer neu gezeichnet und gelöscht werden, i-einen Weg drumherum müsste es doch geben. Aber kA, vll i-wie was mit zwei Ebenen oder so..weiß der Teufel xD
Das was du willst nennt sich Double buffering - man zeichnet die Szene in einen Zeichenbereich im Speicher und nicht direkt auf dem Bildschirm - danach flipt man die beiden Buffer und die neue Szene wird angezeigt. Damit kann man Flackern vermeiden. Die primaere Frage ist halt, ob deine tolle ( :-x ) sum-Library sowas kann. Mit den echten Java-Libraries waere das wahrscheinlich weniger ein Problem zu realisieren... aber ueber dieses sum wurde ja hier schon geschimpft.

2. Problem. Will man zu zwei spielen und die Balken bewegen, muss man die Taste auf der Tastatur immer und immer wieder neu drücken. Gedrückt halten geht nicht. Liegt wohl daran, dass es nur einen Tastaturpuffer gibt, aber hat da einer ne Idee wie man das lösen könnte? Muss ja i-wie. Richtige Spiele laufen ja damit.
Technisch gibt es keinen Grund. Man kann KeyDown-Ereignisse behandeln -- eine Beschraenkung wird dir halt wahrscheinlich wieder von dieser bescheidenen sum-Library auferlegt.

Und dann das letzte Problem, was zugegebenermaßen eher ein mathematisches ist. Momentan prallt die Kugel zwar vom Balken der Spieler ab, aber nur wenn sie direkt auf den Balken auftrifft. Wenn sie ihn aber nur i-wie seitlich andötscht, sieht es so aus als ob sie hindurchfliegt.Wollten den Ball also in mehrere Bereiche aufteilen und abfragen, wo und wie er auftrifft. Da unser Ball nen Radius von 10 hat, wollten wir den in 8 Bereichte mit 2,5 Pixeln aufteilen. Problem ist jetzt aber, wir müssen ja auch die horizontale Position kennen. Nur wie kommt man daran? im Kreis ist das ja etwas schwieriger. Wollten das über Sinus und so weiter machen, aber geht nicht. Vllt kennt da jemand noch ne Möglichkeit. Hoffe ihr versteht, was mein Problem ist.
Kannst du mathematisch wahrscheinlich einfacher loesen: http://mathworld.wolfram.com/Circle-LineIntersection.html Also den Kreis mit der dort angegebenen Formel darauf pruefen, ob er mit bestimmten Linien kollidiert.
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
#65
Hmn...das mit dem double buffering hört sich schonmal gut an, hab da nur so meine Probleme mit dem einbauen. Verstehe das ganze nicht so recht. Müsste das theoretisch in ne neue Klasse?

http://www.realapplets.com/tutorial/DoubleBuffering.html

Ich hab mich mal versucht an diesem Tutorial zu orientieren, aber naja, i-wie krieg ich nichtmal den Anfang hin. Ne Klasse Applet gibts scheinbar bei mir und so weiter. Aber dann erweitert er sie ja um Applet und ich wollte das ganze in die Klasse "Kugel" einbauen, da diese ja flackert. Aber kann ich denn eine Klasse um zwei erweitern? Die Klasse Kugel ist ja schon ein Stift und soll jetzt am besten auch ein Applet sein. Das grobe System davon verstehe ich, nur die Implementierung ist einfach nur ein Graus :ugly: Vielleicht kann mir zumindest jemand paar Tipps geben, wie es sein KÖNNTE.

Dann zu dem KeyDown-Ereignis. Ich glaube du hast mich falsch verstanden. Man kann die Taste schon gedrückt halten und der Balken bewegt sich dann je nachdem hoch oder runter, aber sobald der andere Spieler das drückt, geht nichts mehr. Also muss man andauernd drücken.

EDIT: Wer möchte kann sich ja hier mal ne funktionierende Version des Programms und meines Spieles herunterladen :ugly:

http://rapidshare.com/files/227492458/Pong.rar.html
 
Zuletzt editiert:

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
#66
Hiho, ich verzweifel langsam hier :/ Hab die mathematische Funktion von chrizel einmal eingebaut. Funktioniert aber nicht so richtig, zumindest wenn ich das alles richtig eingebaut hab. Könnte vielleicht jemand mal drüber schauen und gegebenenfalls mal sagen, was falsch ist? UNd ja, das sum.Kern fürn Arsch ist, weiß ich selbst :ugly:

Kugel:
Code:
import sum.kern.*; 
import sum.werkzeuge.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Kugel extends Stift
{
    // Bezugsobjekte
    double a = 0.05;
    double c = 10;
    Rechner meinRechner;
    Bildschirm derBildschirm;
    // Attribute

    // Konstruktor
    public Kugel(Bildschirm b)
    {   
        super();
        meinRechner = new Rechner();
        derBildschirm = b;
    }

    // Dienste
    public void zeichneKugel()
    {
        zeichneKreis(c);
    }
    public void loescheKugel()
    {
        radiere();
        zeichneKreis(c);
        normal();
    }
    public void Richtung()
    {
        dreheBis(meinRechner.ganzeZufallszahl(-45,45));
    }
        
    public void Bewegung()
    {
        zeichneKugel();
        loescheKugel();
        bewegeUm(a);
        zeichneKugel();
    }
    public void Kollision2(double x1, double x2, double y2, double y1, double a1, double a2, double d1, double d2)
    {
        if (((c*c)*meinRechner.wurzel(((((hPosition()-x2)-(hPosition()-x1))
           *(((hPosition()-x2)-(hPosition()-x1)))+(((vPosition()-y2)-(vPosition()-y1))
           *((vPosition()-y2)-(vPosition()-y1))))-(((x1*y2)-(x2*y1))*((x1*y2)-(x2*y1))))))>0)
        {
            dreheUm(180-2*winkel());
        }
                else if (((c*c)*meinRechner.wurzel(((((a2-(hPosition()))-(a1-(hPosition())))
                          *(((a2-(hPosition()))-(a1-(hPosition()))))+(((d2-(vPosition()))-(d1-(vPosition())))
                          *((d2-(vPosition()))-(d1-(vPosition())))))-(((a1*d2)-(a2*d1))*((a1*d2)-(a2*d1))))))>0)
        {
            dreheUm(180-2*winkel());
        }
                else if(hPosition()<10 || hPosition()>630)
        {
            loescheKugel();
            bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
            Richtung();
        }
        else if(vPosition()>(derBildschirm.hoehe()-10))
        {
            dreheUm(360-2*winkel());
        }
        else if(vPosition()<10)
        {
            dreheUm(360-2*winkel());
        }
    }
    public void Kollision(double pos,double pos2)
    {
        if(hPosition()<40 && vPosition() > pos && vPosition() < (pos+75) )
        {
            dreheUm(180-2*winkel());
        }
        if(hPosition()>600 && vPosition() > pos2 && vPosition() < (pos2+75) )
        {
            dreheUm(180-2*winkel());
        }
        else if(hPosition()<10 || hPosition()>630)
        {
            loescheKugel();
            bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
            Richtung();
        }
        else if(vPosition()>(derBildschirm.hoehe()-10))
        {
            dreheUm(360-2*winkel());
        }
        else if(vPosition()<10)
        {
            dreheUm(360-2*winkel());
        }

            
    }
}
Spieler:
Code:
import sum.kern.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Spieler1 extends Stift
{
    // Objekte
    Bildschirm derBildschirm;
    // Konstruktor
    public Spieler1(Bildschirm b)
    {
        super();
        derBildschirm = b;
    }

    // Dienste
    public void zeichneBalken()
    {
        zeichneRechteck(20,75);
    }
    public void loescheBalken()
    {
        radiere();
        zeichneRechteck(20,75);
        normal();
    }
    public void hoch()
    {
       if (vPosition()>0)
         {
            loescheBalken();
            dreheUm(90);
            bewegeUm(10);
            dreheUm(-90);
            zeichneBalken();
          }
          else
          {
           loescheBalken();
          dreheUm(-90);
          bewegeUm(0.1);
          dreheUm(90);
          zeichneBalken();
        }         
    }
    public void runter()
    {
        if(vPosition()<(derBildschirm.hoehe()-50))
        {
          loescheBalken();
          dreheUm(-90);
          bewegeUm(10);
          dreheUm(90);
          zeichneBalken();
        }
        else
        {
            loescheBalken();
            dreheUm(90);
            bewegeUm(0.1);
            dreheUm(-90);
            zeichneBalken();
        }
    }    
}
hauptprogramm:
Code:
import sum.kern.*;
/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Hauptprogramm
{ 
    boolean running = true;
    // Objekte
    Kugel dieKugel;
    Bildschirm derBildschirm;
    Tastatur dieTastatur;
    Spieler1 derBalken;
    Spieler1 derBalken2;
    // Konstruktor
    public Hauptprogramm()
    {
        derBildschirm = new Bildschirm(640,480);
        dieKugel = new Kugel(derBildschirm);
        dieTastatur = new Tastatur();
        derBalken = new Spieler1(derBildschirm);
        derBalken2 = new Spieler1(derBildschirm);
    }

    // Dienste
    public void fuehreAus()
    {
        derBildschirm.nachVorn();
        derBalken.bewegeBis(10,300);
        derBalken2.bewegeBis(610,300);
        dieKugel.bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
        dieKugel.Richtung();
        while ( running = true)
        {
            dieKugel.Kollision2(derBalken.hPosition(),derBalken.hPosition(),derBalken.vPosition(),(derBalken.vPosition()+75), derBalken2.hPosition(), derBalken2.hPosition(), derBalken2.vPosition(), (derBalken2.vPosition()+75));
            dieKugel.Bewegung();
            derBalken.zeichneBalken();
            derBalken2.zeichneBalken();
            if (dieTastatur.wurdeGedrueckt())
            {
                switch (dieTastatur.zeichen())
                {
                    case 'w':derBalken.hoch();break;
                    case 's':derBalken.runter();break;
                    case Zeichen.PFEILOBEN :derBalken2.hoch();break;
                    case Zeichen.PFEILUNTEN :derBalken2.runter();break;
                }
                dieTastatur.weiter();
            }
            
            
    }
    }
}
 
Zuletzt editiert:
#69
ist es jetzt etwas besser?^^
Ich weiß nicht genau, ob ich eine Verbesserung sehe. Auf jeden Fall fehlt etwas Dokumentation, damit man weiß, was wo passiert und gemacht wird.

Ich habs mal durch den Formatierer laufen lassen, jetzt siehts so aus
Code:
import sum.kern.*;
import sum.werkzeuge.*;

/**
 * @author MiMaMartin
 * @version 1.0
 */
public class Kugel extends Stift {
    // Bezugsobjekte
    double a = 0.05;
    double c = 10;
    Rechner meinRechner;
    Bildschirm derBildschirm;

    // Attribute

    // Konstruktor
    public Kugel(Bildschirm b) {
        super();
        meinRechner = new Rechner();
        derBildschirm = b;
    }

    // Dienste
    // Diese Methode zeichnet eine Kugel mit ???
    // Wo kommt dieses c für die Methode, die du in der Methode aufrufst eigentlich her?
    // Wenn es keine Übergabeparameter ist, macht dann die Methode überhaupt Sinn?
    public void zeichneKugel() {
        zeichneKreis(c);
    }
    /**
    / Diese Methode loescht die Kugel. Dabei wird die alte Kugel geloescht, eine
    / neue gezeichnet und dann noch etwas mit ihr gemacht
    /*
    public void loescheKugel() {
        radiere();
        zeichneKreis(c);
        normal();
    }

    public void Richtung() {
        dreheBis(meinRechner.ganzeZufallszahl(-45, 45));
    }

    public void Bewegung() {
        zeichneKugel();
        loescheKugel();
        bewegeUm(a);
        zeichneKugel();
    }

    public void Kollision2(double x1, double x2, double y2, double y1,
            double a1, double a2, double d1, double d2) {
        // Diese if Abfrage macht etwas sehr seltsames
        if (((c * c) * meinRechner
                .wurzel(((((hPosition() - x2) - (hPosition() - x1))
                        * (((hPosition() - x2) - (hPosition() - x1))) + 
                        (((vPosition() - y2) - (vPosition() - y1)) * ((vPosition() - y2) - 
                                (vPosition() - y1)))) - (((x1 * y2) - (x2 * y1)) * ((x1 * y2) - 
                                        (x2 * y1)))))) > 0) {
            dreheUm(180 - 2 * winkel());
        } else if (((c * c) * meinRechner
                .wurzel(((((a2 - (hPosition())) - (a1 - (hPosition())))
                        * (((a2 - (hPosition())) - (a1 - (hPosition())))) + (((d2 - (vPosition())) - (d1 - (vPosition()))) * ((d2 - (vPosition())) - (d1 - (vPosition()))))) - (((a1 * d2) - (a2 * d1)) * ((a1 * d2) - (a2 * d1)))))) > 0) {
            dreheUm(180 - 2 * winkel());
        } else if (hPosition() < 10 || hPosition() > 630) {
            loescheKugel();
            bewegeBis(derBildschirm.breite() / 2, derBildschirm.hoehe() / 2);
            Richtung();
        } else if (vPosition() > (derBildschirm.hoehe() - 10)) {
            dreheUm(360 - 2 * winkel());
        } else if (vPosition() < 10) {
            dreheUm(360 - 2 * winkel());
        }
    }

    public void Kollision(double pos, double pos2) {
        if (hPosition() < 40 && vPosition() > pos && vPosition() < (pos + 75)) {
            dreheUm(180 - 2 * winkel());
        }
        if (hPosition() > 600 && vPosition() > pos2
                && vPosition() < (pos2 + 75)) {
            dreheUm(180 - 2 * winkel());
        } else if (hPosition() < 10 || hPosition() > 630) {
            loescheKugel();
            bewegeBis(derBildschirm.breite() / 2, derBildschirm.hoehe() / 2);
            Richtung();
        } else if (vPosition() > (derBildschirm.hoehe() - 10)) {
            dreheUm(360 - 2 * winkel());
        } else if (vPosition() < 10) {
            dreheUm(360 - 2 * winkel());
        }

    }
}
Ich hab bei zwei Methoden mal etwas kommentiert, damit du siehst, was ich unter Kommentierung verstehe.
Ich hab leider nicht soviel Lust, mich durch den ganzen Codewust zu arbeiten, aber es ist schwer leserlich, weswegen du auch den Fehler so schwer findest.

Was mich noch stört ist sowas:
Code:
else if (((c * c) * meinRechner
                .wurzel(((((a2 - (hPosition())) - (a1 - (hPosition())))
                        * (((a2 - (hPosition())) - (a1 - (hPosition())))) + (((d2 - (vPosition())) - (d1 - (vPosition()))) * ((d2 - (vPosition())) - (d1 - (vPosition()))))) - (((a1 * d2) - (a2 * d1)) * ((a1 * d2) - (a2 * d1)))))) > 0)
Das ist viel zu lang und verschachtelt. Da musst du dir was einfallen lassen. Evtl brauchst du mehrere Methoden, die dann ausführen sollen, was du willst. zB eine Methode "wurzel()" die macht, was auch immer du da willst. Und dann noch weitere Methoden, die einen Punkt verschieben oder was auch immer.
Beim Programmieren immer auf Lesbarkeit achten, dann ist er auch leichter wartbar. Vor allem sollte man auch in der Methode kommentieren. zB was passiert da in meiner if Abfrage. Kommentieren immer gleich wenn man etwas schreibt. Nicht erst danach, wo man wieder vergessen hat, was der Code da eigentlich macht.
Falls du Angst hast, du wirst dann nicht fertig und dein Lehrer gibt dir ne schlechte Note, dann sag deinen Eltern, dass euer Lehrer euch das schlecht erklärt und schick sie mal zu ihm.
Desweiteren kann ich als IDE Eclipse empfehlen. Damit kann ich am Besten arbeiten. Download hier. Eclipse Seite Wikipedia Eintrag
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
#70
Ja, das mit den Kommentaren ist sicherlich sinnvoll. Ich persönlich verstehe das ganze aber (noch) und denke das es reicht, wenn cih die Kommentare erst nachher setze. Aber du hast ja recht. Für andere ist es dann richtig schwer sich Einzuarbeiten.

Bei der Methode, wo du meinst, die wäre vieeeel zu lang, haperts bei mir. Ansonsten läuft alles. Aber diese Methode funktioniert einfach nicht. Muss mal schauen, wenn nicht, gebe ich das so ab und der Lehrer soll selbst schauen, wie er das Projekt fertig bekommt. Da der ganze Kurs nicht zurechtkommt, will der das Projekt quasi abbrechen und ich soll ne Musterlösung erstellen. Eigentlich wollte ich das daher richtig toll machen. Aber notfalls nehme ich die vereinfachte "schlechtere" Version.

Und ja, ich würde gerne mit Eclipse etc. arbeiten. Aber in der Schule müssen wir halt BlueJ benutzen und ich denke, dass ich nochmal anders aufgebaut als Eclipse. Wenn ich schon teilweise meine Probleme mit BlueJ habe, wird das damit wohl noch schwerer. Trotzdem danke für den Tipp. Nen Blick ist es sicherlich wert.
 
#71
Und ja, ich würde gerne mit Eclipse etc. arbeiten. Aber in der Schule müssen wir halt BlueJ benutzen und ich denke, dass ich nochmal anders aufgebaut als Eclipse. Wenn ich schon teilweise meine Probleme mit BlueJ habe, wird das damit wohl noch schwerer. Trotzdem danke für den Tipp. Nen Blick ist es sicherlich wert.
Ich hab mal gelesen, was BlueJ eigentlich bietet. Da steht Anfängern soll das objektorientierte Programmieren beigebracht werden. Dann vermute ich aber auch, dass es nicht den Funktionsumfang eines Eclipse hat bzw haben will.
Der Vorteil ist, dass man nach Einarbeitungszeit mit Eclipse die ganzen Methoden aus der API direkt mit JavaDoc Kommentaren in der IDE hat und mit Strg+Leertaste dann den Text vervollständigen kann und so Zeug, was du eigentlich gar nicht wissen musst :ugly:

Aber da die handvoll Leute hier, die wissen was Java ist usw. schon "Profiwerkzeuge" nehmen, ist es schwer etwas zu deinem Problem zu sagen auf die Schnelle.
 

crack-king

Administrator
Team-Mitglied
systems, systems, systems, systems, systems, systems
#72
Na gut, das kann natürlich sein. Aber trotzdem danke. Hab hier nen anderes Problem, was vielleicht einfacher sein dürfte.

Ich hab die Klasse Kugel und dann jetzt ncoh eine Klasse Spielstand. Diese hat zwei int Werte c und d, welche gleich 0 sind. Jetzt gibt es in dieser Klasse eine Methode mit welcher ich dsa ganze auf dem Bildschirm zeichnen lasse. Jetzt wollte ich aber einfügen, dass wenn der Ball abprallt, er den c oder d Wert um einen erhöht. Habe also so eine hat-Beziehung erstellt und wollte einen Wert nun erhöht. Leider kreige ich immer eine NullPointerException.

Code sieht wie folgt aus:
Code:
else if(hPosition()<10)
        {
            loescheKugel();
            bewegeBis(derBildschirm.breite()/2, derBildschirm.hoehe()/2);
            Richtung();
            derSpielstand.d++;
        }
 
PSN-Name: Nullnummer
Spielt gerade: verrückt
#73
Wie siehts denn aus mit Microcontroller Programmierung mit C. Schon mal jemand drangewagt, oder macht das beruflich? Vor allem mit Atmels? Ich hab mich auf http://www.mikrocontroller.net/ umgesehen und überleg mir, was man sinnvolles bzw. aus Spaß entwerfen könnte, was dann mit einem Microcontroller gesteuert wird.

Wenn ich Zeit hab versuche ich mich von Zeit zu Zeit mal darin... würde mich aber eher als noob bezeichnen.... fummel auch mehr an PIC's in Basic rum...
 
#75
Ich setz mich gerade mit C# auseinander. Ich hätte als Datenstruktur gerne eine ArrayList um da was zu sammeln und später in ein double[] Array umzuwandeln.
Laut MSDN gibts eine ArrayList, aber in VisualStudio 2008 Express Editions wird sie nicht angezeigt. Gibts die ArrayList dann nur für Käufer der Vollversion oder was? ?(

Edit: Hat sich erledigt, war ein Fehler im inkludieren der Collection. Hat LinkedList kein Standard Add?
 
Zuletzt editiert:
#78
Ich frag wohl an der falschen Ecke, aber ich habe XCode installiert für OS X und dort kann man, wenn ich das richtig verstehe, auch ganz normale Java Programme schreiben. Oder ist damit die veraltete Java Bridge gemeint?
 
PSN-Name: chrizeliq
#79
Ich frag wohl an der falschen Ecke, aber ich habe XCode installiert für OS X und dort kann man, wenn ich das richtig verstehe, auch ganz normale Java Programme schreiben. Oder ist damit die veraltete Java Bridge gemeint?
Probiers doch aus. ^^ In der Beschreibung zu "Java Application" steht "This project builds an Ant-based Swing application " Aber Netbeans, Eclipse & Co. erscheinen mir fuer Java wahrscheinlich auch besser zu sein. Btw. Netbeans 6.7 (derzeit noch als RC hier http://www.netbeans.org/community/releases/67/index.html) hat fuer OSX eine neue Optik bekommen, sieht jetzt da ganz nett aus. http://wiki.netbeans.org/NewAndNoteWorthyNB67#section-NewAndNoteWorthyNB67-WindowSystem Ja ich weiss, du bist wahrscheinlich eher noch im Eclipse-Lager.
 
#80
Probiers doch aus. ^^ In der Beschreibung zu "Java Application" steht "This project builds an Ant-based Swing application " Aber Netbeans, Eclipse & Co. erscheinen mir fuer Java wahrscheinlich auch besser zu sein. Btw. Netbeans 6.7 (derzeit noch als RC hier http://www.netbeans.org/community/releases/67/index.html) hat fuer OSX eine neue Optik bekommen, sieht jetzt da ganz nett aus. Ja ich weiss, du bist wahrscheinlich eher noch im Eclipse-Lager.
Klar probier ich es aus, muss mich aber erst Mal in die Funktionsweise der IDE einlesen :)
Netbeans hab ich für JavaFX Experimente benutzt, aber die Autovervollständigen Funktion ist bei Eclipse besser. Aber mal die neue Version antesten.
 
Top