Java Programmierung, Syntax < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:18 Sa 13.02.2010 | Autor: | matheja |
Aufgabe | Hallo,Ich bin grad derbe am lernen für meine Klausur und habe folgende Aufgaben.ich will nur wissen ob meine jeweiligen Lsgen richtig sind.
Aufgaben:
Gegeben seien die Folgenden Codefragmente:
a)
int var;
var = var + 5;
Lässt sich der Wert der Variablen var Berechnen? Wenn ja, welchen Wert
besitzt var nach der Ausführung der Programmzeilen? Wenn nein, warum
lässt sich var nicht berechnen? Welchen Fehler gibt der Java-Compiler?
b)
for (int i = 0; i<10; i++);
{
…
}
Wie häufig wird der Block (die geschweiften Klammern) ausgeführt?
Begründen Sie Ihre Antwort
c)
int ergebnis = 5;
int x = fun();
int y = ergebnis;
…
int fun()
{
int ergebnis = 55;
return ergebnis;
}
Welchen Wert besitzt die Variable y nach Ausführen der letzen
Programmzeile? Begründen Sie Ihre Antwort.
d)
int a = calculate()
…
double calculate()
{
double result = 5;
…
return result;
}
Kann der Variablen a ein Ergebnis der Funktion calculate zugewiesen
werden? Begründen Sie Ihre Antwort.
e)
double a;
Double b;
Worin unterscheiden sich a und b? Gibt es Leistungen die nur einer von
beiden erbringen kann?
|
a) Wert lässt sich nicht berechen.Wenn mein Programm so aussieht:
public class Ueb {
public static void main(String[] args) {
int var;
var=var+5;
System.out.println("Das Ergebnis"+var);
}
}
erhalte ich :
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The local variable var may not have been initialized
b) schleife von i=0 bis i=9 und erhöht sich jeweils um 1 also insgesamt 10 durchlüfe
c) y wird zunächst einmal ergebnis zugewiesen und ergebnis wird 55 zugewiesen und ausgegeben => y=55
d)find ich doch sehr schleierhaft:
int a = calculate() // hier bekomm calculate einen integer zugwiesen
…
double calculate() // hier double calculate
{
double result = 5;
…
return result;
}
=> Inuitiv würd ich nein sagen aber so ganz begründen kann ich das nicht
e)double a; :Darstellung von Gleikommazahlen 64-Bit
Double b; :bin ich mir sehr unsicher kaum auch was im netz gefunden
danke für eure hilfe und beste grüße
matheja
|
|
|
|
Hallo!
Ich kann kein Java, aber C++, das ist relativ ähnlich...
a) Korrekt, so weit ich weiß, müssen Variablen in Java initialisiert werden. (In C nicht)
b) Korrekt
c) Das ist nicht richtig. Die Variablen 'ergebnis' innerhalb und außerhalb der Funktion sind nicht identisch. Es ist y=55 und x=5.
Das wäre ja auch schrecklich, stell dir vor, du rufst in einer for(int i=0... Schleife eine Funktion auf, welche ihrerseits wieder eine Schleife über int i enthält.
Dein Ergebnis wäre in C korrekt, wenn man am Anfang ein einziges mal 'global int ergebnis' definiert hätte. (In C)
d)
>> int a = calculate() // hier bekomm calculate einen integer zugwiesen
Böser fehler!
Die Zuweisung geschieht IMMER von rechts nach links. Dem Integer a wird also der Rückgabewert der Funktion calculate() zugewiesen.
calculate liefert aber double zurück. In C gibt das eine Warnung, daß hier ein double implizit (also ohne es hinzuschreiben) in ein int umgerechnet wird, aber der Code läuft in der Regel. Es wird also a=5 sein. Meines Wissens ist Java auch gutmütig, wenn einem "größeren Typen" ein "kleinerer Typ" zugewiesen wird, hier ist es aber umgekehrt. Das int ist der "kleinere Typ", weil es keine Nachkommastellen aufnehmen kann, das double aber schon. Sauber und in Java vermutlich notwendig ist ein expliziter Typecast: int a = (int) calculate(). Damit signalisierst du, daß du weißt, was du da tust.
Man sollte dran denken, daß die Nachkommastellen meist abgeschnitten werden, und daß es Probleme gibt, z.B. ein int vom Wert 1000 einem char (geht nur bis 127 bzw 255) zuzuweisen.
e)
Das nennt sich Autoboxing, Double b ist dann ein Objekt, keine einfache Variable. Allerdings kann ich da auch nicht viel zu sagen.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:51 So 14.02.2010 | Autor: | matheja |
Hey vielen Dank Event_Horizont :)
Ich nehm deine Ratschläge und arbeite das alles nochmal nach
beste grüße
matheja
|
|
|
|