Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo Community,
ich bin dabei Java zu lehrnen und habe da mal eine Frage zu den Methoden.
Ich möchte über eine Methode einen Namen oder Zahl abfragen und diese dann in Main Variable speichern, mit Arryas gehts aber mit Int's oder String's nicht. Wieso?
Java:
import javax.swing.*;
public class beispiel {
static void methode1(int i){ // geht nicht!
i=Integer.parseInt(JOptionPane.showInputDialog("Eine Zahl eingeben: "));
}
static void methode2(String Name){ // geht nicht!
Name=JOptionPane.showInputDialog("Namen eingeben: ");
}
static void methode3(int[] array){ // funktioniert!
array[0]=Integer.parseInt(JOptionPane.showInputDialog("Eine Zahl eingeben: "));
}
public static void main(String[] args) {
int i = 0;
String Name = null;
int[] array = new int[1];
methode1(i); // geht nicht!
System.out.println(i); // 0
methode2(Name); // geht nicht!
System.out.println(Name); // null
methode3(array); // funktioniert!
System.out.println(array[0]); // Die eingegebene Zahl
}
}
Bei dem Integer übergibst du nicht die Variable sondern den Wert der Variable. Es wird für die Methode also eine temporäre Kopie erzeugt. Das was du versuchst nennt sich Zeiger oder Referenzen und geht so nicht in Java. Da müsstest du mit Rückgabewerten arbeiten.
Bei dem String weiß ich das nicht. Es kann aber sein, dass es da genauso ist.
Beim String wird eine Referenz kopiert. Die neue Referenz zeigt dann auf den eingegebenen String.
Beim Array funktioniert es, weil eine Kopie auf den Anfang des Arrays übergeben wird. Diese Kopie wird nur dazu verwendet, den Anfang wieder zu finden um das, was da steht, zu ändern. Das Original zeigt nun also auf den veränderten Anfang.
Genau. Das Stichwort dazu ist dann "Containerklasse". Die enthält dann alle Werte, die man zurückgeben will. Aber man sollte sparsam mit ihnen umgehen. Public Variablen sind laut Konvention auch nur bei statischen Konstanten und Containerklassen erlaubt. Ausnahmen bestätigen hier die Regel.
Sind es nur Werte eines Typs, dann macht man ein Array, schreibt da alle Werte rein, die man zurückgeben will und gibt das Array zurück. Dann muss man sich nur (am Besten als JavaDoc) aufschreiben, welcher Wert in welches Feld kommt.