Seite 3 von 25 ErsteErste 123456713 ... LetzteLetzte
Ergebnis 31 bis 45 von 369

Thema: Ein Narr lernt Java

  1. #31
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Super, danke

    Jetzt will ich eine Klasse Ebene, die als Methode hat: Berechne den Abstand zum Nullpunkt. Dafür wird die eben definierte Methode aufgerufen:

    PHP-Code:
    class euklnorm
    {
        public static 
    double norm(double[] a) { 
            
    double result 0
            for (
    double item a) { 
                
    result += Math.pow(item,2); 
            } 
            return 
    Math.sqrt(result); 
        } 
    }

    public class 
    Ebene {
    double[] Koordinaten;
    double dist;

    Ebene(double[] Koorddouble b)
        {
        
    Koordinaten=Koord;
        
    dist=b;
        }
    double Nullabstand()
        {
        return(
    dist/norm(Koordinaten));
        }

    Aber dann bekomme ich einen Fehler: The Method norm(double[]) is undefined for Ebene.java



    Ich sollte mir vielleicht doch mal ein Buch kaufen, wo die Logik für Leute erklärt ist, die Ahnung von Mathe haben.
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  2. #32

  3. #33
    Minion Avatar von Tzu Iop
    Registriert seit
    28.10.05
    Ort
    Im EG ohne Aufzug *schulterzuck*
    Beiträge
    6.377
    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Super, danke

    Jetzt will ich eine Klasse Ebene, die als Methode hat: Berechne den Abstand zum Nullpunkt. Dafür wird die eben definierte Methode aufgerufen:

    PHP-Code:
    class Euklnorm
    {
        public static 
    double norm(double[] a) { 
            
    double result 0
            for (
    double item a) { 
                
    result += Math.pow(item,2); 
            } 
            return 
    Math.sqrt(result); 
        } 
    }

    public class 
    Ebene {
    double[] Koordinaten;
    double dist;

    Ebene(double[] Koorddouble b)
        {
        
    Koordinaten=Koord;
        
    dist=b;
        }
    double Nullabstand()
        {
        return(
    dist/Euklnorm.norm(Koordinaten)); // Hier
        
    }

    Aber dann bekomme ich einen Fehler: The Method norm(double[]) is undefined for Ebene.java
    Visibility error. Du brauchst das Präfix, damit Java weiß auf welche Klasse du dich beziehst. Wenn es kein Präfix hat, dann sucht Java in der entsprechenden Klasse in der die Funktion aufgerufen wird und dort gibt es halt nunmal keine Methode mit der Signatur "norm(double[])". Weiter Präfixe können durch packages dazu kommen.

    Außerdem schreibt man per Konvention Klassen in Java immer mit einem Großbuchstaben am Anfang.

    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Ich sollte mir vielleicht doch mal ein Buch kaufen, wo die Logik für Leute erklärt ist, die Ahnung von Mathe haben.
    Das ist eigentlich ganz gut. Hat Ramkhamhaeng ja auch auszugsweise verlinkt. Ansonsten empfehle ich noch Eclipse als IDE.
    Papoy!

  4. #34
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144


    Danke sehr. Eclipse verwende ich schon
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  5. #35
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Tzu Iop Beitrag anzeigen
    Du kannst in Java problemlos Arrays als Argumente übergeben. Fängt doch schon bei der main an und setzt sich in der util.Array fort.
    Stimmt
    Da war irgendwie bei Vala, wo man, oder vielleicht auch nur ich, bei Arrays etwas tricksen muss.

    Java ist auch eine Insel ist sehr gut und als Mathematiker sollte es auch kein Problem sein, die paar Paradigmen zu lernen.

  6. #36
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Zitat Zitat von Tzu Iop Beitrag anzeigen
    Du kannst in Java problemlos Arrays als Argumente übergeben. Fängt doch schon bei der


    main an und setzt sich in der util.Array fort.

    Das sollte hinhauen:
    PHP-Code:
    public static double norm(double[] a) {
        
    double result 0;
        for (
    double item a) {
            
    result += Math.pow(item,2);
        }
        return 
    Math.sqrt(result);

    edit: Das ist die Iterator-Variante von for bzw. eine foreach-Schleife. Geht mit jedem Array und jeder Liste. item muss nur den passenden Typ haben.
    Das "+=" gibt es für jede arimethische Operation. Kurz gesagt ist "a (op)= b" äquivalent zu "a = a (op) b".
    Achso, kannst Du mir noch erklären, warum die Methode "public static" vorgesetzt bekommt? Was macht das? Was ist überhaupt der Unterschied, wenn man Klassen "public" oder eben nicht "public" markiert?
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  7. #37
    Ausgetreten
    Gast
    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Achso, kannst Du mir noch erklären, warum die Methode "public static" vorgesetzt bekommt? Was macht das? Was ist überhaupt der Unterschied, wenn man Klassen "public" oder eben nicht "public" markiert?
    Das eine ist die Sichtbarkeit. Es gibt public, private, protected und "default". Letzteres steht in Anführungszeichen, da es kein Schlüsselwort ist, sondern nur das Fehlen eines Sichtbarkeitsschlüsselwortes bedeutet. Public heißt, dass die Methode oder Klasse von überall zu sehen ist und drauf zugegriffen werden kann. Bei private kann nur die eigene Klasse die Methoden benutzen, bei protected alles im selben Packet und bei "default" wimre die Klasse und alle Unterklassen (vererbte Klassen).

    Das Wort "static" zeigt an, dass es sich um eine Klassenmethode handelt. Dafür habe ich auch etwas gebraucht um das zu verstehen. Wenn etwas static ist, dann greift man über den Klassennamen darauf zu, ansonsten über die Instanz. Beispiel: Math.sqrt(2) => Klasse Math, Methode static sqrt(int) im Gegensatz zu: String s = "hallo", s.length() => length() ist nicht static.

    Da funktioniert auch für Variablen. Ist eine Variable als static deklariert, so können alle Instanzen darauf zugreifen. So kann man z.B. zählen wie viele Instanzen einer Klasse vorhanden sind.

    PHP-Code:
    class WithStaticMember{

    static 
    int count 0;

    public 
    WithStaticMember(){
        
    count++;
    }

    public 
    void main (String[] arg){
        print 
    WithStaticMember.count// =0
        
    WithStaticMember wsm = new WithStaticMember();
        print 
    WithStaticMember.count// =1
    }



  8. #38
    Minion Avatar von Tzu Iop
    Registriert seit
    28.10.05
    Ort
    Im EG ohne Aufzug *schulterzuck*
    Beiträge
    6.377
    "static" heißt insbesondere, dass die Methode bzw. die Variable auch über den Klassennamen referenziert werden kann und nicht zwangsläufig ein Objekt braucht, um angesprochen zu werden. Zusätzlich sind "static" Variablen für alle Instanzen einer Klasse gleich. Im Umkehrschluss braucht alles, was nicht als "static" geflagt ist eine Instanz der jeweiligen Klasse mit der es aufgerufen wird.

    Bei den Sichtbarkeiten braucht man eigentlich erstmal nur "public" und "private". "protected" braucht man auch in der fortgeschrittenen Praxis eher selten und "default" ist so ein Fall für sich, wo es irgendwie schon immer Streit gab, ob man es benutzen soll und warum es überhaupt drinne ist.

    Zusätzlich gibt es noch das Flag "final". Bei Variablen bewirkt es, dass sie nur einmal initialisiert werden können und dann nicht mehr veränderbar sind. "final" vor Klassen und Methoden hat Auswirkungen auf die Vererbarkeit.
    Papoy!

  9. #39
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Das flag final macht also aus einer Variablen eine Konstante?

    OK, das mit static durchschau ich noch nicht so ganz, im Moment schreib ich es einfach nicht hin, und wenn es dann Probleme gibt, füg ichs ein ... kann ich mir merken: eine Methode, die auf Objekte zugreifen soll, die nicht erst in dieser Klasse definiert werden, muss static sein?

    Danke für die ganze Hilfe und die Geduld
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  10. #40
    Ausgetreten
    Gast
    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Das flag final macht also aus einer Variablen eine Konstante?

    OK, das mit static durchschau ich noch nicht so ganz, im Moment schreib ich es einfach nicht hin, und wenn es dann Probleme gibt, füg ichs ein ... kann ich mir merken: eine Methode, die auf Objekte zugreifen soll, die nicht erst in dieser Klasse definiert werden, muss static sein?

    Danke für die ganze Hilfe und die Geduld
    Ob man etwas "static" macht ist eher eine Designentscheidung. Nehmen wir als Beispiel deine euklidische Norm. Wenn du von jedem double-Array d die Norm berechnen willst, dann kannst du die Methode als statisch deklarieren. Ein Aufruf EuklNorm.norm(d) genügt dann.

    Wenn aber weitere Eigenschaften eine Rolle spielen oder es bestimmte Anforderungen an die Arrays gibt (z.B. alle Elemente des Arrays >0), von denen du eine Norm berechen willst, dann lohnt es sich ein Klasse zu bauen, die diese Eigenschaften kapselt und die Objekte auf diese Anforderungen überprüft. In diesem Fall sollte die Methode nicht static sein und der Aufruf funktioniert über die Instanz. Im Beispiel müsstest du von d mit new eine EuklNorm e erzeugen, also
    Code:
     EuklNorm e =  new EuklNorm (d); // vorrausgesetzt der Konstruktor ist vorhanden
    Aufrufen würde man dann e.norm(). Hier würde man die Argumente weglassen, denn intern würde man es so programmiert haben, dass e mit den Elementen von d arbeiten kann. Wäre sonst ja auch blöd, wenn man e extra mit den Elementen von d anlegt, aber dann die Norm von ganz anderen Zahlen ausgeben könnte.

    Wie gesagt static und nicht-static ist schwer zu verstehen. Es fällt mir auch kein anschauliches Beispiel ein. Du bekommst wohl nun öfter die Meldung "Referencing static variable in a non-static context" oder so ähnlich, stimmt's? Kannst ja mal ein Code-Beispiel bringen, wenn das bei dir vorkommt, dann kann ich da vielleicht mal was konkreter drauf eingehen.

  11. #41
    Minion Avatar von Tzu Iop
    Registriert seit
    28.10.05
    Ort
    Im EG ohne Aufzug *schulterzuck*
    Beiträge
    6.377
    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    Das flag final macht also aus einer Variablen eine Konstante?
    Jein. Echte Konstanten sollten "static final" sein. Variablen die nur "final" sind können sich ja von Instanz zu Instanz noch unterscheiden.

    PHP-Code:
    class Point {
        public static final 
    String NAME "Punkt";
        public final 
    String tag "Tag";
        public final 
    int x;
        public 
    int y;
       
        public 
    Point(int xint y) {
            
    this.y;
            
    this.x;
        }
    }

    public static 
    void main (String[] args) {
        
    Point a = new Point(1,1);
        
    Point b = new Point(2,2);
        
    Point.name == a.name == b.name//Die sind alle gleich
        
    a.tag == b.tag//Die sind auch gleich aber der Aufruf Point.tag geht nicht.
        
    a.!= b.x//Die sind logischerweise nicht gleich.
        
    b.1//Das hier würde einen Fehler geben.
        
    b.1// Während das ginge.

    Zitat Zitat von Peregrin_Tooc Beitrag anzeigen
    OK, das mit static durchschau ich noch nicht so ganz, im Moment schreib ich es einfach nicht hin, und wenn es dann Probleme gibt, füg ichs ein ... kann ich mir merken: eine Methode, die auf Objekte zugreifen soll, die nicht erst in dieser Klasse definiert werden, muss static sein?
    Hast du mal C programmiert? "static" sollte man dann verwenden, wenn man eher imperativ programmiert. Es also keinen Objektkontext gibt.
    Papoy!

  12. #42
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Ich glaube zwar, es jetzt halbwegs verstanden zu haben, aber ich kann ja mal ein Beispiel bringen:
    PHP-Code:
     public class AbstandPunktEbene {

        
    /**
         * @param args
         */
        
    public static double AbstPktEbene(Ebene EPunkt P)
        {
            
    E.HNF();
            
    double d=0;
            
    int i=0;

            for(
    i=0;i<3;i++)
            {
                
    d=d+((E.HNF()[i])*(P.Koord(i)));
            }
            return(
    Math.abs(d-E.Nullabstand()));
        }
        public static 
    void main(String[] args) {
        
    double[] KoordE=new double[3], KoordP=new double[3];
        
    KoordE[0]=1;
        
    KoordE[1]=2;
        
    KoordE[2]=2;
        
    KoordP[0]=1;
        
    KoordP[1]=-1;
        
    KoordP[2]=-1;
        
    double b=-3;
    Ebene E=new Ebene(KoordE,b);        
    Punkt P=new Punkt(KoordP);
    System.out.println("Der Abstand der Ebene vom Nullpunkt beträgt "+Math.abs(E.Nullabstand()) );
    double d=AbstPktEbene(E,P);
    System.out.println("Der Abstand von E zu P beträgt "+d);
    }


    Wenn ich hier die Methode nicht static mache, dann will er nicht Aber klar, ich hab ja kein Objekt konstruiert, zu dem die Methode gehört, sondern die Methode soll zwei Objekte aus verschiedenen Klassen nehmen und damit was machen. Das ergibt ja schon Sinn , nur warum das "statisch" heißt, das klingt so, als wäre das Gegenstück "dynamisch"
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  13. #43
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Wenn sie nicht static ist, müsstest du ein Objekt erstellen, um auf diese Methode zuzugreifen.
    PHP-Code:
    AbstPktEbene obj = new AbstPktEbene();
    double abstand obj.AbstPktEbene(e,b); 
    Das wird aber nicht klappen, weil du für die Methode den Klassennamen verwendet hast. Das Wort ist aber für den Konstruktor reserviert!
    Methodennamen beginnen in der Regel mit einem Kleinbuchstaben, um solche Kollisionen zu vermeiden.

    In diesem Fall ist eine statische Routine eh besser, denn du benötigst keine Objektwerte. Wenn du Objektorientiert arbeiten möchtest, verwirf die Klasse AbstPktEbene und erweitere die Klasse Ebene um eine Methode
    PHP-Code:
    doube abstandPunkt(Punkt p){
    ...


  14. #44
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Nee, C hab ich noch nie benutzt - ich wollte Java lernen, weil es erstens Plattformunabhängig und zweitens Objektorientiert ist. Naja, und wenn ich Java "beherrsche", dann lern ich auch C schnell

    Im Moment will ich ein paar einfache geometrische Probleme lösen, z.B. halt den Abstand einer Hyperebene von einem Punkt im R^n, den Abstand zweier Ebenen, den Schnittwinkel usw. Am Ende wollt ich ein GUI schreiben, wo man im ersten Fenster die Aufgabe anklickt, die man gelöst haben will und im zweiten dann die benötigten Werte eingibt, und dann kommt das Ergebnis raus. Also definiere ich mir jetzt ein paar Methoden und Objekte, die ich so brauche.
    Wovor ich noch ein bisschen Bammel hab, ist den guten alten Gauß zu programmieren, und zwar für die Fälle, wo der Lösungsraum mehrdimensional ist. Ich will das aber selber machen, ich glaub, da lernt man was dabei.
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  15. #45
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Wenn sie nicht static ist, müsstest du ein Objekt erstellen, um auf diese Methode zuzugreifen.

    PHP-Code:
    AbstPktEbene obj = new AbstPktEbene();
    double abstand obj.AbstPktEbene(e,b); 
    Das wird aber nicht klappen, weil du für die Methode den Klassennamen verwendet hast. Das Wort ist aber für den Konstruktor reserviert!
    Methodennamen beginnen in der Regel mit einem Kleinbuchstaben, um solche Kollisionen zu vermeiden.

    In diesem Fall ist eine statische Routine eh besser, denn du benötigst keine Objektwerte. Wenn du Objektorientiert arbeiten möchtest, verwirf die Klasse AbstPktEbene und erweitere die Klasse Ebene um eine Methode
    PHP-Code:
    doube abstandPunkt(Punkt p){
    ...

    Gute Idee an sich. Aber: Dann könnte ich auch die Klasse "Punkt" erweitern, und wenn ich den Abstand einer Gerade und einer Ebene rechnen will, muss ich die Klasse Gerade oder die Klasse Ebene erweitern. Und für den Abstand zweier Geraden... Deswegen werd ich wohl eher eine Klasse "Abstände" schreiben, die keine Objekte bekommt, sondern nur all die gewünschten Methoden.
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

Seite 3 von 25 ErsteErste 123456713 ... LetzteLetzte

Berechtigungen

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