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?
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?