Übernommene Variablen(werte) aus der Main-Klasse ändern?

Berlin_er

Mitglied
Guten Tag zsm!

Ich bin gerade bei der Objektorientierung (Klasse,Attribute,Methoden..) dran und habe folgendes Problem:

Ich weiß bereits wie ich Variablen + V.-werte aus der Main-Klasse in eine andere Klasse übernehme. Ich kann es auch z.b. für Ausgaben benutzen. Jedoch verstehe ich noch nicht ganz, wie ich übernommene Variablen(Werte) aus der Main-Klasse in der anderen Klasse ändern kann. In den folgenden Codes habe ich die Variable richter, Typ boolean übernommen. In Methoden kann ich es benutzen, jedoch nicht ändern. In dem Fall von true auf false.

Edit: Geändert werden soll die Variable richter von true auf false in der Methode "ausgabe".

Meine Main-Klasse:
Code:
public class Start{
  public static void main(String [] args){
 
    boolean richter = false;
 
    Quader meinQuader;
    Kugel meineKugel;
    Zylinder meinZylinder;
 
    while (richter == false) {
 
      String produktart = InOut.readString("Produktart? ");
 
      if (produktart.equalsIgnoreCase("Quader")) {
        meinQuader = new Quader();
        meinQuader.abfrage();
        meinQuader.berechnung();
        meinQuader.ausgabe();
        richter = true;
      }
      else if (produktart.equalsIgnoreCase("Kugel")){
        meineKugel = new Kugel();
        meineKugel.kugelDatenEingabe();
        meineKugel.kugelBerechnung();
        meineKugel.kugelDatenAusgabe();
        richter = true;
      }
      else if (produktart.equalsIgnoreCase("Zylinder")) {
        meinZylinder = new Zylinder(richter);
        meinZylinder.abfrage();
        meinZylinder.berechnung();
        richter = true;
        meinZylinder.ausgabe();
      }
      else
      System.out.println("Ein Fehler ist aufgetreten!");
    }
  }
}

die andere Klasse:
Code:
import java.text.DecimalFormat;
public class Zylinder{
  // Anfang Attribute
  private double zylinderpreis;
  private double zylindervolumen;
  private double radius;
  private double hoehe;
  boolean richter;
  DecimalFormat a = new DecimalFormat("#0.00");
  // Ende Attribute
 
  public Zylinder(boolean prichter) {
    richter = prichter;
  }
 
  // Anfang Methoden
  public void abfrage() {
    radius = InOut.readDouble("Radius? ");
    hoehe = InOut.readDouble("Höhe? ");
  }
 
  public void berechnung() {
    zylindervolumen = Math.PI * Math.pow(radius,2) * hoehe;
 
    if (zylindervolumen > 3 && zylindervolumen < 3000)
    zylinderpreis = 0.002 * zylindervolumen + 0.25;
  }
 
  public void ausgabe() {
    if (zylindervolumen > 3 && zylindervolumen < 3000)
    System.out.println("\nVolumen beträgt: "+a.format(zylindervolumen)+" ccm\nPreis beträgt: "+a.format(zylinderpreis)+" Euro");
    else {
      richter = false;
      System.out.println("Das Volumen liegt nicht zwischen 3 ccm und 3000 ccm!");
    }
  }
  // Ende Methoden
}
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Java hat die "Call by Value" Aufrufsemantik für Methoden (und Konstruktoren), bei der Kopien von aktuellen Argumenten für Methodenaufrufe angelegt werden und die Methode wird mit diesen Kopien aufgerufen. Du kannst also keine Variablen innerhalb des Methodenaufrufes nach außen sichtbar verändern, weil die Methode selbst immer nur auf Kopien der Werte arbeitet. Letztlich gibst du einem Methodenaufruf ja auch immer einen "Ausdruck" als Argumentwert. Dass dieser Ausdruck auch eine Variable sein kann heißt nicht, dass damit die Variable an sich gemeint ist. Es ist immer nur der Wert entscheidend, den der Ausdruck generiert. Und eine Variable generiert den Wert, den diese Variable zum Zeitpunkt des Aufrufes gespeichert hat.
Siehe auch: https://javabeginners.de/Grundlagen/Call_by_Value.php
 

Javinner

Top Contributor
@Berlin_er
Java:
public class Door
{

    final static int DOOR_POSITION = 100;

    public boolean isClose(double value)
    {
        return value == DOOR_POSITION;
    }
}

public class IchBinEinBerliner
{
    public static void main(String[] args)
    {
        double closed = 100;
        Door door = new Door();
        boolean doorIsClosed = door.isClose(closed);
        String info = doorIsClosed ? "Door is closed" : "Door is open";
        System.out.println(info);
    }
}
/** Output */
Door is closed
Ich hätte die Abfragen nicht in der Klasse durchgeführt. Eine Klasse Zylinder hat radius und hoehe als Konstruktorparameter zu bekommen. Anhand dieser soll, vorausgesetzt die Prüfung der beiden Parameter gegen Null positiv verlief, automatisch passieren, so dass volume gleich zu Verfügung steht.
Ebenso würde ich die Infos in der Main-Methode abwickeln. Zudem hast du Doppelcode hier und da
Java:
if (zylindervolumen > 3 && zylindervolumen < 3000)
Lagere es in eine private Methode der Klasse aus und greif dann ggf. zu.
Die Werte 3, 3000, 0.002 und 0.25 hätte ich als finale Variablen deklariert. Hat den Vorteil, dass es nur an einer Stelle zu ändern ist, falls es geändert werden muss.
Java:
 (richter == false)
boolean x = true;
if(x) {...} else {x = !x} ! - Negation wenn die else-Abfrage kommen sollte, wird x negiert und ist ab da false ;)
 

Blender3D

Top Contributor
Du kannst also keine Variablen innerhalb des Methodenaufrufes nach außen sichtbar verändern, weil die Methode selbst immer nur auf Kopien der Werte arbeitet. Letztlich gibst du einem Methodenaufruf ja auch immer einen "Ausdruck" als Argumentwert.
Das stimmt so nicht ganz. Wenn als Parameter ein mutable Objekt übergeben wird, kann innerhalb der Methode das Objekt verändert werden. Das stellt ein Problem der Sprache Java dar, bezüglich Sicherheit innerhalb eines Objektes.
In C++ kann man Parameter und die Funktion als const deklarieren , um so etwas zu verhindern. In Java muss man finale Klassen als Parameter benutzen, da sich final als Parameter nur auf die Referenz des Objektes nicht aber auf dessen Attribute bezieht. ( siehe Code )
Code:
public class TestParam {
    private String name = "original";
    public void setName(final String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return name;
    }
}
Code:
public static void testCall( final TestParam p) {
        p.setName("geändert");
    }
Code:
TestParam test = new TestParam();
        System.out.println("vorher: \t" + test);
        testCall(test);
        System.out.println("nachher:\t" + test);
Ergebnis:
vorher: original
nachher: geändert

;)
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Es stimmt trotzdem. Du kannst trotzdem niemals die Variable, die auf ein Objekt zeigt, auf ein anderes Objekt zeigen lassen. Also: Du kannst niemals die ursprüngliche Variable in ihrem Inhalt verändern.
Dass du natürlich ein Feld innerhalb des Objektes ändern kannst, das der Wert der Variablen war, ist davon unberührt.
 

mrBrown

Super-Moderator
Mitarbeiter
Das stimmt so nicht ganz. Wenn als Parameter ein mutable Objekt übergeben wird, kann innerhalb der Methode das Objekt verändert werden. Das stellt ein Problem der Sprache Java dar, bezüglich Sicherheit innerhalb eines Objektes.
In C++ kann man Parameter als const deklarieren , um so etwas zu verhindern. In Java muss man finale Klassen als Parameter benutzen, da sich final als Parameter nur auf die Referenz des Objektes nicht aber auf dessen Attribute bezieht.
Naja, das stellt nur ein Problem deines Designs da, wenn das Objekt Änderungen zulässt, dann ist das eben so ;)
Allerdings ist generell nichts in Java wirklich immutable, mit Reflection geht alles...

BTW muss nicht die Klasse final sein (das verhindert nur Vererbung), sondern die Klasse sollte einfach von außen unveränderlich sein ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Erste Schritte Variablen in abhängigkeit von Git branch Allgemeine Java-Themen 7
Fabiator Variablen Variablen Zählen Allgemeine Java-Themen 3
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Fehler bei Variablen Allgemeine Java-Themen 2
N File Path mit Variablen angeben Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
R Geometry erstellen die abhängig von Variablen ist Allgemeine Java-Themen 6
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
P static Blocks und variablen Allgemeine Java-Themen 41
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
D BlueJ, Variablen die mehrfach vorkommen gleichzeitig umbenennen Allgemeine Java-Themen 3
C Variablen Variablen mit unendlichem Wert Allgemeine Java-Themen 22
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
T Maximale Felder maximale Variablen Allgemeine Java-Themen 2
W Lebendige Variablen herauslesen Allgemeine Java-Themen 1
K Summierung einer Variablen Allgemeine Java-Themen 5
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
K Static Variablen verbieten Allgemeine Java-Themen 10
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
F Variablen Variablen schachteln Allgemeine Java-Themen 6
7 6 int variablen vergleichen Allgemeine Java-Themen 34
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
K Überschreiben von Variablen bei rekursivem Funktionsaufruf Allgemeine Java-Themen 2
R Übergreifende Variablen? Allgemeine Java-Themen 10
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
C Classloading und statische Variablen Allgemeine Java-Themen 2
K Variablen speichern Allgemeine Java-Themen 2
S Variablen bei Aufruf zurücksetzen Allgemeine Java-Themen 4
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
J Statische Variablen, Threadübergreifend. Allgemeine Java-Themen 4
E Variablen anderer Klassen auslesen (nur Name bekannt) Allgemeine Java-Themen 4
P Variablen in einer anderen Klasse auf Änderungen überwachen Allgemeine Java-Themen 12
V Typargument einer Variablen erfragen Allgemeine Java-Themen 4
B Rechnen mit mehreren Variablen Allgemeine Java-Themen 2
G Thread variablen Sichtbarkeit Allgemeine Java-Themen 15
J Java Pfad nicht mehr in Path Variablen??? Allgemeine Java-Themen 2
T Mit JNI finale Variablen überschreiben Allgemeine Java-Themen 14
T JNI -> auf Java-Variablen etc zugreifen Allgemeine Java-Themen 6
M Bezeichnung für Component-Variablen Allgemeine Java-Themen 6
M Variablen an Java-Programm übergeben Allgemeine Java-Themen 3
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
A Überschreibung von Variablen Allgemeine Java-Themen 3
A JavaCC: Variablen zaehlen Allgemeine Java-Themen 12
B globale und lokale Variablen Allgemeine Java-Themen 17
G referenz von variablen Allgemeine Java-Themen 9
O getRuntime().Exec() - Environment - Variablen setzen? Allgemeine Java-Themen 2
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
S In Subklasse auf private Variablen zugreifen Allgemeine Java-Themen 4
S Variablen und ihre Tücken. Allgemeine Java-Themen 7
C Binärbereich einer Variablen abfragen Allgemeine Java-Themen 8
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
J Überschreiben von Variablen Allgemeine Java-Themen 3
C dynamische variablen Namen! Allgemeine Java-Themen 4
M Int und String Variablen verändern Allgemeine Java-Themen 10
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
G Taushen der Input variablen einer method Allgemeine Java-Themen 14
P Objekt- Variablen Allgemeine Java-Themen 16
K Environment Variablen per java -D weitergeben Allgemeine Java-Themen 9
D in class-Dateien nach variablen suchen! Allgemeine Java-Themen 5
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22
B Reguläre ausdrücke mit variablen? Allgemeine Java-Themen 12
MQue JButton an verschiedenen Variablen Allgemeine Java-Themen 2
T Unabhängigkeit von Variablen/ Objekten. Allgemeine Java-Themen 6
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
L Sichtbarkeit von Variablen / getMethode Allgemeine Java-Themen 4
H Variablen (A1, A2, A3 mit A_irgendetwas aufrufen) ohne Array Allgemeine Java-Themen 5
M Variablen in einer .doc Vorlage ersetzen Allgemeine Java-Themen 4
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
E Zugriff auf Variablen äusserer Klassen Allgemeine Java-Themen 2
M Variablen in Klasse verpacken? Allgemeine Java-Themen 10
F Allegemeiner Datentyp für Objekte und Primitive Variablen Allgemeine Java-Themen 6
W Array mit Variablen aus Vararg füllen Allgemeine Java-Themen 4
S Problem mit Boolean Variablen Allgemeine Java-Themen 8
A [SOLVED] Classpath und statische Variablen Allgemeine Java-Themen 6
J variablen wert ändernung mit einer art actionlistener? Allgemeine Java-Themen 4
C klassenübergreifende variablen Allgemeine Java-Themen 3
J 28 Variablen vergleichen und die höchsten addieren Allgemeine Java-Themen 15
T ungewollter Zugriff auf private Variablen? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben