Objectreferenz statt value an Methode uebergeben?

Joefish

Neues Mitglied
Hallo,
Es handelt sich um folgenden Code:
[Java=42]package ch02;

import java.util.Scanner;

public class Tictactoe {
public static void main(String args[]){
char[][] field;
int FIELD_WIDTH, FIELD_HEIGHT, input;
Scanner scanner = new Scanner(System.in);

System.out.printf("Enter Field-Dimension:\nWidth: ");
FIELD_WIDTH = scanner.nextInt();
System.out.printf("Height: ");
FIELD_HEIGHT = scanner.nextInt();
field = new char[FIELD_HEIGHT][FIELD_WIDTH];

for(int i = 0; i < FIELD_HEIGHT; i++){
for(int j = 0; j < FIELD_WIDTH; j++){
field[j] = ' ';
}
}

field_print(field);
do{
input = scanner.nextInt();
if(input < FIELD_WIDTH && input >= 0)
field_add(input, field);
field_print(field);

}while(input != -1);

}

public static void field_print(char[][] field){
int width = field[0].length;
int height = field.length;

for(int i = 0; i < height; i++){
for(int j = 0; j < width; j++){
System.out.printf("|%c",field[j]);
}
System.out.println("|");
}
for(int i = 0; i < (width*2+1); i++)
System.out.printf("=");
System.out.println();
for(int i = 0; i < width; i++)
System.out.printf("|%d",i);
System.out.printf("|\nEnter slot: ");
}

public static void field_add(int input, char[][] field){

for(int i = field.length-1;i >= 0;i--)
if(field[input] == ' '){
field[input] = 'X';
break;
}
}
}
[/Java]
Meine Frage bezieht sich auf Codeabschnitt 65-71 und die dort aufgerufene Funktion field_add.

Das Programm erstellt ein Feld mit FIELD_WIDTH x FIELD_HEIGHT, welches durch field_print gezeichnet wird.
field_add dient dazu in eine angegebene Reihe ein 'X' zu schreiben.
In Zeile 68 werden die Werte input und field and field_add uebergeben, oder so dachte ich zumindest.
Ich dachte, dass bei Funktionen IMMER Variablen by value uebergeben werden. Jedoch haette das in
main initialisierte Array field[][] sich nicht aendern duerfen, was durch Zeile 69 widerlegt wird.

Werden bei Referenztypen, welche als Funktionsparameter angegeben wurden, deren Referenz kopiert?
Falls ja, kann dies beeinflusst werden, sodass die Wert des Strings/Arrays.. uebergeben wird?
 

Marco13

Top Contributor
Werden bei Referenztypen, welche als Funktionsparameter angegeben wurden, deren Referenz kopiert?
Ja.
Falls ja, kann dies beeinflusst werden, sodass die Wert des Strings/Arrays.. uebergeben wird?

Nicht direkt. Man muss schon manuell eine Kopie erstellen. Bei 1D-Arrays tut's da ein
method(array.clone());
aber bei 2D muss man sich eine Methode dafür schreiben (sonst wären die INNEREN Arrays auch wieder dieSELBEN wie die, die in der main erstellt werden).


EDIT: Äh... das wird doch ein "Vier Gewinnt", oder? :)
 

Joefish

Neues Mitglied
Vielen Dank fuer deine Antwort Marco.
In meinem Buch wurden Referenztypen etwas komisch erklaert und scheine dabei gleich clone() mitueberlesen zu haben.
Aber in diesem Falle bin ich ja froh, dass die Referenz uebergeben wird.

Ganz recht, das wird ein Vier Gewinnt.
Ich dachte nachdem ich die ersten 200 Seiten meines Buches gelesen hatte, kann ich mich an die typischen Einsteigerprojekte wagen. :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
H SimpleDataFormat.format() spuckt falsches Jahr aus (statt 1999 = 3899) Java Basics - Anfänger-Themen 7
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
S Methode von vererbter Klasse, statt die der "Mutterklasse" aufrufen Java Basics - Anfänger-Themen 28
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
P Datentypen Kann ich bei double Komma statt Punkt eingeben? Java Basics - Anfänger-Themen 14
L Dialogbox statt Konsole verwenden Java Basics - Anfänger-Themen 5
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
Z Lottoprogramm - Zeigt manchmal nur 5 Zahlen statt 6 an? Java Basics - Anfänger-Themen 4
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
D Methode die statt char[] ein "null" zurück gibt Java Basics - Anfänger-Themen 8
B GridBagLayout in der oberen rechten Ecke starten statt mittig Java Basics - Anfänger-Themen 2
M toString gibt "null" statt "0.0" aus Java Basics - Anfänger-Themen 5
S Threads Programm terminiert statt zu warten Java Basics - Anfänger-Themen 20
H inputfeld dezimalzahl mit komme statt punkt Java Basics - Anfänger-Themen 12
R Double: auf einmal Komma statt Punkt Java Basics - Anfänger-Themen 4
H TreeMap<> statt TreeMap<Long, String> Java Basics - Anfänger-Themen 2
J Polymorphie Iteratoren statt Collections Java Basics - Anfänger-Themen 13
C lokale Variable verwenden statt globale Java Basics - Anfänger-Themen 7
R POI HSSF liesst in Excel Formel statt Ergebnis Java Basics - Anfänger-Themen 4
K Compiler-Fehler Probleme mit UTF-8 (statt ANSI) und Notepad++ Java Basics - Anfänger-Themen 2
C Objektreferenz holen statt übergeben Java Basics - Anfänger-Themen 2
T Ausgabe findet nicht statt Java Basics - Anfänger-Themen 4
R Objektname statt Adresse ausgeben Java Basics - Anfänger-Themen 4
S Datentypen float statt void Java Basics - Anfänger-Themen 3
S Decimalpunkt statt Dezimalkomma Java Basics - Anfänger-Themen 2
T Array statt String Java Basics - Anfänger-Themen 12
Guybrush Threepwood array.length statt array.length() Java Basics - Anfänger-Themen 6
G Bild in Buffer statt temporäre Bilddatei Java Basics - Anfänger-Themen 6
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
Landei Annotations statt Listeners? Java Basics - Anfänger-Themen 36
K Txt statt in TextArea in JTable einlesen und bearbeiten können Java Basics - Anfänger-Themen 4
J statt modulo "if-Anweisung" Java Basics - Anfänger-Themen 9
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
D JSP include wie bei php? (inhalt statt ergebnis einfügen)) Java Basics - Anfänger-Themen 24
L Ausgabe in arabischen Zahlen statt in ASCII Java Basics - Anfänger-Themen 9
G Griechische statt lateinischen Buchstaben beim Schreiben Java Basics - Anfänger-Themen 9
M Beispiel-Webprojekt: Statt HSQLDB Postgres verwenden Java Basics - Anfänger-Themen 12
S kompletten Datensatz statt nur ein Feld auslesen lassen,wie? Java Basics - Anfänger-Themen 3
M was wenn der benutzer ein double statt int eingibt ? Java Basics - Anfänger-Themen 3
N Vergleich findet nicht statt. Java Basics - Anfänger-Themen 13
G JDialog auf Jpanel statt Frame? Java Basics - Anfänger-Themen 4
T Wie Eingabe von Gleitkommazahl mit Komma statt Punkt Java Basics - Anfänger-Themen 4
F Sanduhr statt Mauszeiger anzeigen Java Basics - Anfänger-Themen 3
A .statt,anzeigen beim NumberFormat + Wie JTable formatieren? Java Basics - Anfänger-Themen 4
G Toolbar buttons sollen dialoge anzeigne statt pop up Java Basics - Anfänger-Themen 44
R Nur Double statt Sting oder Integer Combo sortieren und ! Java Basics - Anfänger-Themen 16
D ausgabe verändern (statt zeilenumbruch leerzeichen) Java Basics - Anfänger-Themen 2
M statt drop down menü - buttons Java Basics - Anfänger-Themen 5
O JToolBar wird Tab in JTabbedPane statt Toolbar in JFrame Java Basics - Anfänger-Themen 6
W Punkt statt Komma? Java Basics - Anfänger-Themen 2
M Zeichen aneinander Reihen, statt diese zu ersetzen! Java Basics - Anfänger-Themen 3
Dilandau html applet: .jar laden statt .class Java Basics - Anfänger-Themen 4
V Betätigung des Buttons Erhöhung der Variablen um 2 statt 1 Java Basics - Anfänger-Themen 5
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
J Java call by Value oder Reference Java Basics - Anfänger-Themen 35
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
D String value change listener Java Basics - Anfänger-Themen 2
G Java Object value und entity? Java Basics - Anfänger-Themen 2
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
F Entity vs value Java Basics - Anfänger-Themen 3
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
N JFreeChart - Value und veriable Zeitachse Java Basics - Anfänger-Themen 15
J Open Office Property Value mit Java aufrufen Java Basics - Anfänger-Themen 0
H call by reference & value Java Basics - Anfänger-Themen 14
R Property Value als null setzen Java Basics - Anfänger-Themen 1
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
B Compiler-Fehler Hilfe!!! required variable ; found value Java Basics - Anfänger-Themen 4
M Arrays als return Value? Java Basics - Anfänger-Themen 2
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
T Schleifenindex "by reference" / "by value" Java Basics - Anfänger-Themen 13
V Methoden key value Parameter Java Basics - Anfänger-Themen 11
C Probleme bei einem Stringvergleich - Attribut "value" unterscheidet sich Java Basics - Anfänger-Themen 9
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
D TreeMap: Höheren Key ermitteln und den Value liefern Java Basics - Anfänger-Themen 3
B Call by Value/Reference Java Basics - Anfänger-Themen 4
Todesbote Map (Key=String; Value = Vector) Value/Vector sortieren Java Basics - Anfänger-Themen 13
B Variablen unique Value Java Basics - Anfänger-Themen 12
R Key/Value ohne Maps? Java Basics - Anfänger-Themen 2
B Datentypen Key/Value sortieren Java Basics - Anfänger-Themen 15
S Warnung in Eclipse: unassigned closeable value Java Basics - Anfänger-Themen 20
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
P Key anhand von Value finden (Hashtable) Java Basics - Anfänger-Themen 3
B JavaSkript Form-Tag Value & Post Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben