2017-11-15 5 views
-2

Nur eine kurze Frage zum Konvertieren einer bestimmten Codezeile zwischen C++ und Java. Ich habe etwas über neuronale Netzwerke gelernt und ich habe begonnen, mein eigenes in der Sprache zu schreiben, mit der ich am meisten Erfahrung habe, Java. Es war ziemlich einfach, den Code von C++ in Java zu übersetzen, aber es gibt ein kleines Problem, das ich kennengelernt habe. Ich bin verwirrt, wie ich diese spezifische Codezeile in eine Java-Entsprechung umwandeln kann, und ich kann durch die Suche nichts Spezifisches für dieses Problem finden.Was entspricht dieser Syntax in Java?

Der ursprüngliche Code ist:

Struct SNeuron { 
    //the number of inputs into the neuron 

    int m_NumInputs; 
    //the weights for each input 
    vector<double> m_vecWeight; 
    //ctor 
    SNeuron(int NumInputs); 
}; 

und mein Code:

public class SNeuron { 

public int m_NumInputs; // the number of inputs into the neuron 
public ArrayList<Double> m_vecWeight = new ArrayList<Double>(); // the weights for each input 
// ctor 

Meine Frage ist, wie konvertiere ich:

SNeuron(int NumInputs); 

in seine Java gleichwertig? Von dem, was ich gelesen habe, scheint Structs kein Feature zu sein, das Java verwendet, also habe ich nur ein bisschen zu kämpfen, um zu verstehen, was genau diese Codezeile in dem Kontext tut, in dem sie verwendet wird.

+0

Wie heißt diese Funktion? In Java wird es gleich genannt. :) – Rakete1111

+0

Es ist ein Konstruktor. Ich hatte den Eindruck, dass sie die gleiche Syntax in Java verwenden. – Angew

+0

Der einzige Unterschied zwischen Klassen und Strukturen besteht in den Standardzugriffsschutzstufen. – molbdnilo

Antwort

1
public class SNeuron 
{ 

// the number of inputs into the neuron 

public int m_NumInputs; 

// the weights for each input 

public List<Double> m_vecWeight = new ArrayList<Double>(); 

// ctor 
SNeuron(int NumInputs) { 
    m_NumInputs = NumInputs; 
} 
+0

Das ist perfekt! Ich hatte das Gefühl, dass ich ihm einen Körper geben musste, aber es fühlte sich nicht richtig an, den Körper leer zu lassen. Vielen Dank! –

+0

Gern geschehen, wenn Sie keine Fragen haben, markieren Sie bitte die Antwort als gelöst. – Ashwel

0

In C++, SNeuron(int NumInputs); ist die Deklaration eines Konstruktors unter int, und dies ist in der Klassendeklaration enthalten.

Sie tun das nicht in Java - effektiv sind alle Konstruktoren und alle Funktionen für diese Angelegenheit in der Klassendeklaration inline. Mit anderen Worten

SNeuron(int NumInputs); // within the class declaration 
SNeuron::SNeuron(int NumInputs) : m_NumInputs(NumInputs){} // In a translation unit 

Karten

SNeuron(int NumInputs) { 
    m_NumInputs = NumInputs; 
} 

aber beachten Sie, dass m_ für Java Felder mit idiosynkratischen ist.

+2

@Angew: Es bedeutet, dass ich einen Kaffee brauche. Willst du auch eins? – Bathsheba

+1

Nein, danke :-) Ich bin wahrscheinlich der einzige solche Programmierer auf dem Planeten, aber ich trinke keinen Kaffee. – Angew

1

die Kommentare im Code gegeben, ich bin ziemlich sicher, dass das Äquivalent ist:

public class SNeuron { 
    public final double[] weights; 

    public SNeuron(int numInputs) { 
     weights = new double[numInputs]; 
    } 
} 

Es ist nicht wirklich eine List<Double> verwenden möchten, wird es viel langsamer und viel mehr Speicherplatz verbrauchen - Jedes Doppel in einer solchen Liste wird zu einem vollwertigen Objekt mit allen zugehörigen Gemeinkosten.