Problemchen C++ vs. Java

Status
Nicht offen für weitere Antworten.

xeron

Mitglied
N'Abend zusammen.

Habe mir vorgenommen nach C/C++ nun auch ein wenig in die Java-Welt reinzuschnuppern.
Kaum habe ich die grundlegenden Befehle im Kopf, schon taucht ein erstes Problem auf, dass ich in C++ durch eine globale (jaja, ich weiß: soll man nicht - aber für ein eigenes Programm is das ok) gelöst hätte. In Java geht das nicht wegen Kapselung ;(

Viel bla um nix, jetzt zur Sache:

Folgendes Problem:

Klasse A, Klasse B und Klasse Matrix, alle voneinander unabhängig! Ich will jedoch über Konstruktoren und Methoden der Klassen A und B auf Einträge einer Matrix aus der Klasse Matrix zugreifen und diese verändern.

Ich befürchte, ich stehe einfach nur total aufm Schlauch, da ich immer in Richtung globale Variable denke und das nicht ausm Kopf bekomme.

Vielen Dank für eure Tipps...
 

hdi

Top Contributor
Ich glaube was du suchst ist das Schlüsselwort static? Das wäre also dann eine Variable, die "global" im Programm existiert und nicht an ein bestimmtes Objekt gekoppelt ist.

Java:
class Matrix{
 public static int[][] matrix;
}

class A{
  public A(){
      Matrix.matrix = new int[2][2]; // geht da du kein Matrix-Objekt brauchst
  }
}

aber das ist eig. schlechtes Design, wobei du das ja schon selber gesagt hast. Es ist halt nicht objektorientiert, und einigermassen fehleranfällig wenn verschiedene Klassen von außen beliebig so ein Objekt verändern können. Also in dem Fall mit static hast du halt echt immer diese eine statische Matrix, und egal wie viele Matrix-Objekte zu erzeugst: Die haben damit nix zu tun bzw. manipulieren alle dieses eine int-array.

...war das deine Frage?

edit: Auch wichtig ist die Sichtbarkeit wenn du Klassenübergreifende Zugriffe machen willst. Mit public hast du immer vollen Zugriff von jeder andere Klassen. Aber auch das ist schlechtes Design.
 
Zuletzt bearbeitet:

xeron

Mitglied
:eek: Ach Gott, ich bin doch so ein Noob...
War ganz ganz böse auf nem Schlauch gestanden. Knoten geplatzt. Hast henau mein "Problem" voll getroffen... ;)

Vielen Dank für den rasanten Denkanstoss... :applaus:

Werde die Matrix sicherlich nicht public lassen, sondern paar Methoden basteln, die den Unfug zumindest ein wenig eindämmen ;-)
 

hdi

Top Contributor
Oder du versuchst es doch nochmal mit einem OO-Ansatz, und übergibst den Klassen, die auf die Matrix zugreifen müssen, eine Referenz eines Matrix-Objektes. (und machst dann natürlich die Daten in der Matrix nicht-statisch).
edit: Ja ich weiss das ist manchmal etwas schwer oder umständlich. Ich mach das auch ab und zu weil ich nicht einsehe ein einziges Objekt das eh immer gleich bleibt über 12 Konstruktoren durchreichen zu müssen :D Das ist dann schon Design auf ganz hohem Level, sowas gut hinzukriegen :(
 

xeron

Mitglied
Ich brauche genau eine Matrix zum abspeichern einiger Daten. Problem an der Sache ist, dass - ganz grob gesprochen - Klasse A die Größe der Matrix ändert, und Klasse B die Einträge ändert (in Wahrheit passiert noch bissl mehr); is so, kann man nicht anders modellieren!

Dann bräuchte ich nen konstanten "Pointer" auf genau diese eine Matrix, oder? Geht das denn überhaupt in java?

edit: Ich glaube, ich verfolge den ersten Ansatz... Gefällt mir irgendwie besser. Noch besser gefällt mir sowas in C++ :bae: - aber ich will mir java endlich mal "antun" von wegen plattformunabhängig undso...
 
Zuletzt bearbeitet:

hdi

Top Contributor
Dann bräuchte ich nen konstanten "Pointer" auf genau diese eine Matrix, oder?
Ja
Geht das denn überhaupt in java?
Jein... Es gibt in Java kein Call-by-Reference. Jetzt kommt es darauf an wie genau deine Daten aussehen und was du damit machst. zB sagtest du du willst die Größe der Matrix ändern. Wenn du jetzt zB ein Array nutzt, musst du aufpassen:

Java:
public class ArrayTest {
	public static void main(String[] args) {
		int[] a = new int[9];
		bla(a);
		System.out.println(a.length); // 9 !!!
	}
	static void bla(int[] a){
		a = new int[12];
	}
}

Ergebnis ist nicht 12, weil die Variable, in der die Referenz steckt, der Methode als Kopie übergeben wird (Call-by-Value).

Naja also.. solange du eben nicht direkt auf Variablen zugreifst, sondern sie dir per Methode holst, kannst du nur per Punkt-Notation "globale" Änderungen machen. D.h. also das klappt nur bei Objekten, und im speziellen Fall von Arrays auch, wenn du Werte im Array änderst. Aber bei primitiven Typen und generell Neu-Zuweisungen per "=" ist das immer nur lokal. Da Arrays nicht dynamisch in ihrer Größe änderbar sind, hast du bei deinem Vorhaben also 2 Optionen:
a) Die Daten nicht direkt als Array übergeben, sondern das ganze in der Klassen-Logik kapseln. Also ein Aufruf von myMatrix.changeLength(x) oder sowas.
b) Die Daten direkt sichtbar machen, dann arbeitest du auf dem Original.
 

xeron

Mitglied
Mein erster Gedanke war sowas: (hab mal dein Beispiel modifiziert)

Java:
public class ArrayTest {
    public static void main(String[] args) {
        int[] a = new int[9];
        a = changeLength(a, 12); // edit
        System.out.println(a.length); // 12 
    }
    static int[] changeLength(int[] a, int n){
        int[n] tmp = new int[n];
        // rüberkopieren der Daten
        return tmp;
    }
}

sollte doch funktionieren (modulo denk- und tippfehler:D). Ob das die sauberste Lösung ist, sei dahingestellt...
 
Zuletzt bearbeitet:

hdi

Top Contributor
Java:
a = changeLength(a, 12);
So funktioniert das... Aber diese Logik würde ich eben in deine Matrix-Klasse verlagern:

Java:
class Matrix{
  int[] a;

  public void changeLength(int len){
      int[] tmp = new int[len];
      // kopieren der Daten 
      a = tmp;
  }
}

In diesem Fall funktioniert das, da du die Original-Variable von a ansprichst, da sie direkt sichtbar ist
 
Zuletzt bearbeitet:

hdi

Top Contributor
Und noch für mit auf den Weg :D: Schau dir mal die Klasse List bzw. ArrayList an. Im Gegensatz zu Arrays sind die Dinger nämlich dynamisch und bieten noch ein paar andere nette Methoden an.
 

ModellbahnerTT

Bekanntes Mitglied
Wenn du nur eine Instanz von Matrix in 2 anderen Klassen brauchst, mach dir halt irgendwo eine statische Variable hin, anstatt gleich die ganze Matrix Klasse statisch zu machen.
Oder du gibst den Klassen die die Matrix brauchen auch einfach die Matrix, übrigens auch in C++ der normale, objektorientierte Weg.
 

xeron

Mitglied
hab ich mir schonmal angeguckt, aber: selbes Prinzip wie bei verketteten Listen: erst wenn man selber mal sowas mühsam geschrieben hat, versteht man die vorgefertigten Klassen so richtig (und würdigt sie erst richtig ;-) )

Ich will erstmal mein prog ohne irgendwelche vordefinierten klassen basteln. Wenn ich tiefer in der Materie bin, dann nehm ich sowas hinzu. Den Mehraufwand verbuche ich dann als "erfahrung" *g*

Aber danke für den tipp...

@ modellbahnerTT: ich will mit der Matrix ein paar Operationen ausführen, die nicht so ganz trivial sind. Da is ne eigene Klasse mit Mathoden besser... Aber dennoch danke
 
Zuletzt bearbeitet:

hdi

Top Contributor
Ich glaube ersteres, ich hab auch erst beim zweiten Durchlesen gerafft was du meintest. Das hört sich nämlich n bisschen so an als würdest du wollen dass man die Matrix-Klasse ersetzt durch
eine statische Variable
Also sowas wie
Java:
static int[][] matrix;

...aber du hast natürlich recht, eine statische Instanz ist besser als gar keine Instanz.
 

xeron

Mitglied
Entweder du hast meine Antwort nicht verstanden oder ich deine Frage nicht...

Habe deine Antwort nicht verstanden. Passt meiner Meinung nach nicht zu meinem Problem - außer ich steh schon wieder aufm Schlauch.

mach dir halt irgendwo eine statische Variable hin
wohin deiner Meinung nach genau, bei 2 absolut voneinander unabhängigen Klassen, die darauf zugreifen müssen?

Hier mal ein absolut vereinfachtes Modell meines Progs - ich kann es nicht anders modellieren, da die Klassen deutlich komplexer sind und nur nebenbei Daten in genau die eine Matrix schreiben und lesen sollen.

Java:
public class Matrix {
    private int[][];
    
    public void setzeDimension(int zeilen, int spalten) {
        // blubb
    }
    public void setzeElement(int zeile, int spalte, int eintrag) {
        // blubb
    }
}

public class A {
    // public B steht hier nicht !!! - sonst ist das kein Thema mit ner statischen Variable
    public ändereDimension(int zeilen, int spalten) {
       // ruft u.A. setzeDimension() auf
    }
}


public class B {
    // public A steht hier nicht !!! - sonst ist das kein Thema mit ner statischen Variable
    public ändereElement(int zeile, int spalte, int eintrag) {
        // ruft u.A. setzeElement() auf
    }    
}

Kannst du mal bitte den Quelltext so ergänzen, wie du dir das vorgestellt hast? Ich danke dir...

War mir in C++ damals zu blöd und hab das durch eine globale Variable gelöst. Geht aber leider in Java nicht ;(
 

yxcvbn

Mitglied
kannst du es nicht so machen:
Java:
class A 
{
Matrix m;
public A( Matrix c )
    {
    m = c;
    }
public ändereDimension(int zeilen, int spalten) 
    {
    m.setzeDimension(zeilen, spalten);
    }
}

public class Main
{
public static void main(String[] args)
    {
    Matrix m = new Matrix()
    A a= new A(m);
    B b= new B(m);
    }
}
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Taschenrechner Problemchen Java Basics - Anfänger-Themen 3
B Problemchen mit Bild Java Basics - Anfänger-Themen 10
S ImageViewer mit kleinen Problemchen Java Basics - Anfänger-Themen 4
P Problemchen mit Array Java Basics - Anfänger-Themen 14
T JDBC Problemchen Java Basics - Anfänger-Themen 2
N Kleines Problemchen mit ButtonGroup Java Basics - Anfänger-Themen 2
S GridBagLayout: Problemchen Java Basics - Anfänger-Themen 2
E JCheckBox-problemchen Java Basics - Anfänger-Themen 2
C Problemchen mit Exception(s) Java Basics - Anfänger-Themen 22
J anfänger problemchen. Java Basics - Anfänger-Themen 26
I kleines problemchen bei DecimalFormat Java Basics - Anfänger-Themen 6
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 2
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 4
A csv Reader für Java? Java Basics - Anfänger-Themen 24
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben