Probeklausur 2 A6 assignable

Xfel
Erstie
Erstie
Beiträge: 14
Registriert: 23. Mär 2013 19:20

Probeklausur 2 A6 assignable

Beitrag von Xfel »

Hi,

In der Aufgabe 6 der 2. Probeklausur sollen wir ja assignable \nothing nicht verwenden, sondern diese tatsache selbst versichen. Also habe ich da für die beiden Arrays je ein \forall int i; i>=0 && i<a.length; a == \old(a) geschrieben.
In der Musterlösung steht aber auch jehweils a == \old(a). Ist das nicht unnötig? Immerhin sind die beiden Arrays hier Methodenparameter und keine Instanzvariablen - wenn die Methode terminiert (egal wie) kann man auf a und b doch eh nicht mehr zugreifen.

himbaer
Mausschubser
Mausschubser
Beiträge: 98
Registriert: 28. Apr 2010 19:29
Kontaktdaten:

Re: Probeklausur 2 A6 assignable

Beitrag von himbaer »

Ich denke, dass es schon wichtig ist, dass in die Beschreibung mit Aufzunehmen, da bei Arrays die Referenz an eine Methode übergeben wird.
(CALL-BY-REFERENCE)
meine Testsignatur :!:

Xfel
Erstie
Erstie
Beiträge: 14
Registriert: 23. Mär 2013 19:20

Re: Probeklausur 2 A6 assignable

Beitrag von Xfel »

Ja aber das ist doch deshalb call-by-ref weil eine Variable vom typ T[] immer nur eine Referenz enthält. Z.B.

Code: Alles auswählen

void doSth(int[] array) {
    array = null;
}

void main() {
    int[] a = { 1, 2, 3, 4 };
    doSth(a);
    System.out.println(a[0]);
}
Würde, wenn ich es in java ausführe, auf jeden fall funktionieren, und keine NPE werfen. Die KeY-Regel zu Methodenaufrufen sagt doch auch explizit, dass für die Parameter eine neue lokale Variable angelegt wird, damit sich der Wert in der aufrufenden scope nicht ändert, oder?

himbaer
Mausschubser
Mausschubser
Beiträge: 98
Registriert: 28. Apr 2010 19:29
Kontaktdaten:

Re: Probeklausur 2 A6 assignable

Beitrag von himbaer »

Mmh joa, irgendwie hast du Recht. Wäre toll, wenn es dazu eine offizielle Rückmeldung geben würde.
meine Testsignatur :!:

Nathan Wasser
Kernelcompilierer
Kernelcompilierer
Beiträge: 430
Registriert: 16. Okt 2009 09:48

Re: Probeklausur 2 A6 assignable

Beitrag von Nathan Wasser »

Code: Alles auswählen

a[0] = a[0] + 1;
a = new int[0];
Für alle Elemente von a (also die ganzen keine, die in einem leeren Array vorkommen), ist der Wert mit dem Wert im alten a gleich. Dennoch haben wir ein Element verändert.

Sagen wir einfach, dass es wesentlich sicherer ist sich an dem Aufgabentext zu halten: Dort steht explizit, dass sich auch a und b nicht verändern sollen.

Xfel
Erstie
Erstie
Beiträge: 14
Registriert: 23. Mär 2013 19:20

Re: Probeklausur 2 A6 assignable

Beitrag von Xfel »

Ah ok, jetzt habe ich es verstanden. Vielen dank.

Antworten

Zurück zu „Archiv“