Kurs:Einführung in die Informatik mit Java/Kurs 2007/Part 3/Kapitel 9A

Aus Wikiversity

Zusammenfassung[Bearbeiten]

Startet hier, endet wieder mit einer Sitemap. Scheint das Kapitel zu sein, wo es wichtig, interessant und schon etwas komplexer wird. Es werden verschiedene Begriffe (Variablen, Deklarationen) und einige wichtige Konzepte (Verwendung der Variablen) eingeführt. --Michael Reschke 23:33, 14. Jun. 2007 (CEST)

Definition (vorläufig): "Variable — ein Name für eine Speicherstelle im Hauptspeicher, die einen bestimmten Datentyp verwendet, um einen Wert zu halten." Definition (vorläufig): "Eine Deklaration einer Variablen ist die Stelle, an der das Programm angibt, dass eine Variable gebraucht werden wird." Also z. B.

public class Lohnbetrag {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		long lohnbetrag = 123;    //Deklaration einer Variablen

	    System.out.println("Die Variable enthält: " + lohnbetrag );
	}

}

Möglichkeiten der Variablendeklaration:

  • datentyp variablenname;
  • datentyp variablenname = initialwert ;
  • datentyp variablennameEins, variablennameZwei ;
  • datentyp variablennameEins = initialwertEins,
    variablennameZwei = initialwertZwei ;

Bezeichner ist der gewählte Name für eine Variable. Regeln, nach denen das erfolgt

Zuweisungsanweisungen = "Eine Zuweisungsanweisung ändert den Wert, der in einer Variablen gehalten wird."

class Beispiel3
{
  public static void main ( String[] args )
  {
    long lohnbetrag ;  //eine Deklaration ohne Anfangswert

    lohnbetrag = 123;  //eine Zuweisungsanweisung
    System.out.println("Die Variable enthaelt: " + lohnbetrag );
  }
}

Zitat "Die Zuweisungsanweisung stellt den Wert 123 in die Variable. Mit anderen Worten, während das Programm ausgeführt wird (durch die Java Virtuelle Maschine) wird es einen 64 Bit Speicherblock geben, der den Wert 123 bekommt." (Quelle) Das Zitat macht IMHO verständlicher, was passiert und worum es geht... Zur Syntax der Zuweisungsanweisung ("variablenname = ausdruck ;".

Definition "Ein Ausdruck ist eine Kombination von Literalen (Zeichen, die einen Wert darstellen, wie: 3.456), Operatoren (ein Symbol wie Plus ("+") oder Mal ("*"), das nach Arithmetik verlangt), Variablen (ein Speicherabschnitt, der einen Wert enthält) und Klammern ("(" und ")"), die verwendet wird, um einen Wert zu berechnen."

  • Auswertung eines Ausdrucks erfolgt immer von links nach rechts, also 7 + 5 + 3...

Kapitel durchgelesen, aber sicher noch nicht ganz verstanden. Hier würde ein erneuter Durchlauf am Ehesten Sinn machen... --Michael Reschke 23:34, 15. Jun. 2007 (CEST)

Programmieraufgaben[Bearbeiten]

3 Programmieraufgaben. --Michael Reschke 23:33, 14. Jun. 2007 (CEST)

Aufgabe 1[Bearbeiten]

Wird eine Deklaration oder eine Initialisierung entfernt, kann das Programm nicht mehr ordnungsgemäß ausgeführt werden. Eclipse gibt eine Fehlermeldung aus. --Michael Reschke 19:52, 16. Jun. 2007 (CEST)

Aufgabe 2[Bearbeiten]

public class Quadratgleichung {

	public static void main(String[] args) {

		double x ;
		
		x = (2 / 3)  ;
		
		double ergebnis = 3 * x * x - 8 * x + 4;
		
		System.out.print("Bei x = ");
		System.out.print(x);
		System.out.print(" ergibt die Quadratgleichung den Wert ");
		System.out.print(ergebnis);
		
	}

}

Bei Aufgabe 2 habe ich offenbar einen Fehler eingebaut. Die Ausgabe lautet im konkreten Fall dann:

"Bei x = 0.0 ergibt die Quadratgleichung den Wert 4.0"

Auf Papier ausgefüllt, funktioniert alles. Die Fehlersuche kann ja noch heiter werden...

public class Quadratgleichung {

	public static void main(String[] args) {

		double x ;
		
		x = (2 / 3) ;
		
		double ergebnis = 3 * x * x - 8 * x + 4;
		
		System.out.println("Bei x = " + x + " ergibt die QG ... " + ergebnis);
	}

}

Ich habe das Programm mal gekürzt (Zeilen), ohne den Fehler zu beseitigen, die Berechnung ist leider weiterhin falsch:

"Bei x = 0.0 ergibt die QG ... 4.0"

Die Variable x müsste den Wert 0,6666 (Periode) haben und die Variable ergebnis müsste den Wert 0.0 enthalten. --Michael Reschke 00:09, 16. Jun. 2007 (CEST)

Hallo Michael, Deine Vermutung, dass "x" den Wert 0,6666... enthalten müsste, ist zwar naheliegend, aber nicht zutreffend.
Die Zuweisung lautet
x = (2 / 3);
Somit wird die rechte Seite vom Gleichheitszeichen ermittelt, um dann als Wert der Variablen "x" zugewiesen zu werden. Nun steht aber rechts vom Gleichheitszeichen eine Division des int-Wertes "2" durch den int-Wert "3". Das Ergebnis ist demzufolge ein int-Wert, nämlich "0" (also: Null). Und dieser Wert wird dann, da er ja der "double"-Variablen "x" zugewiesen werden soll, in den double-Wert 0.0 konvertiert.
Wenn Du tatsächlich 0,6666... in "x" haben willst, dann solltest Du die Zuweisung anders schreiben, und zwar
x = (2.0/3.0);
Danach sollte es klappen. Gruß, --Exxu 12:37, 16. Jun. 2007 (CEST)
Daran lag es tatsächlich!!! Danke, darauf wäre ich allein nicht gekommen. --Michael Reschke 19:38, 16. Jun. 2007 (CEST)
Die Lösung der Aufgabe lautet also
public class Quadratgleichung {

	public static void main(String[] args) {

		double x = 2.0/3.0;
		
		System.out.println(x);
				
		double ergebnis = 3 * x * x - 8 * x + 4;
		
		System.out.println("Bei x = " + x + " ergibt die QG ... " + ergebnis);
	}

}

Aufgabe 3[Bearbeiten]

Die Lösung der Aufgabe sieht bei mir wie folgt aus:

public class Aufgabe3 {

	public static void main(String[] args) {

		double x ;
		double wert ;
		
		x = 0.0;
		System.out.println(x);		
		wert = 3 * x * x - 8 * x + 4;
		System.out.println("Bei x = " + x + " ergibt die QG ... " + wert);
		
		x = 2.0;
		System.out.println(x);		
		wert = 3 * x * x - 8 * x + 4;
		System.out.println("Bei x = " + x + " ergibt die QG ... " + wert);
		
		x = 4.0;
		System.out.println(x);		
		wert = 3 * x * x - 8 * x + 4;
		System.out.println("Bei x = " + x + " ergibt die QG ... " + wert);
	}
}

Ausgegeben wird dann:

0.0
Bei x = 0.0 ergibt die QG ... 4.0
2.0
Bei x = 2.0 ergibt die QG ... 0.0
4.0
Bei x = 4.0 ergibt die QG ... 20.0

Damit ist die Aufgabe IMHO gelöst. --Michael Reschke 19:52, 16. Jun. 2007 (CEST)

Fehler wird inhaltlich in der Einführung eigentlich erst hier erläutert und da noch einmal an einem Beispiel bewusst gemacht. In Java ergibt der Ausdruck 1/2 + 1/2 = 0! --Michael Reschke 21:47, 16. Jun. 2007 (CEST)

Ergaenzung: Diese (scheinbar) seltsame Arithmetik liegt an der Integer-Division: 1/2 bedeutet nun mal eine Division des "int"-Wertes 1 durch den "int"-Wert 2 (was ja bekanntermassen einen "float"-Wert von 0.5 liefert) und dies als "int"-Wert gedeutet ergibt eben 0.
Auch die obigen Rechenwege, wie zB.
wert = 3 * x * x - 8 * x + 4;
:bedeuten eine mehrfache implizite Typkonvertierung! Um dies zu vermeiden sollte besser:
wert = 3.0 * x * x - 8.0 * x + 4.0;
geschrieben werden --Exxu 23:44, 25. Jun. 2007 (CEST)