Übungsklausur

java__neuling

Aktives Mitglied
Mahlzeit,

ich habe da ein problem.
ich habe hier eine übungsklausur liegen, leider gibt es aber kein lösung dafür.

deswegen stelle ich euch meine lösung vor und, ich hoffe, ihr könnt mir sagen ob meine gedankengänge richtig sind. würde mich wirklich freuen... :)

_______________________________________________________________________
int result;
int a = 13, b = 10, c = 5, d = 6;
result = 5;
result += (a + c) * b++;

-> Wie lautet hier das Ergebnis?
Ich wüde sagen 253
-> Außerdem, macht es einen Unterschied ob da steht b++ oder ++b?

result = b * --a - c * d;
-> Wie lautet hier das Ergebnis?
Ich wüde sagen 90
_______________________________________________________________________

Definiert seien die Klassen Line und Point. Schreiben Sie die SIGNATUREN zweier Konstruktoren der Klasse Line auf. Beim ersten Konstruktor soll ein zu erzeugendes Objekt über zwei Dezimalzahlen initialsiert werden. Beim zweiten Konstruktor soll ein zu erzeugendes Objekt über ein Objekt der Klasse Point initialsiert werden.

Meine Lösung:
public Line (int zahl1, int zahl2);
public Point (); <- ist es hier richtig das es keine Parametr gibt?


Deklarieren Sie beispielhaft eine Variable, in der ganze Zahlen abgespeichert werden können:
int Zahl; <- stimmt das? kommt mir komisch vor??

Weisen Sie der Variablen beispielhaft einen Wert zu:
Zahl = 30;
_______________________________________________________________________

Ein Java-Programm enthalte folgende Programmzeilen:

int selektor = 1;
switch (selektor){
case 0 : System.out.print("Null");
case 1 : System.out.print("Eins");
case 2 : System.out.print("Zwei"); break;
default: System.out.print("UndSoWeiter"); }

Welche Ausgabe erfolgt auf dem Bildschirm nach Abarbeitung dieser Programmzeilen?
kommt mir zu einfach vor....Ausgabe ist hier "Eins", oder nicht?


Wandeln Sie die Verzweigung aus Teil a) in eine if – Struktur um, die bei allen denkbaren Werten für selektor dieselbe Ausgabe produziert wie die gegebene switch-Struktur:

Meine Lösung:
if (selector == 0){
system.out.print("Null");
}
if(selector == 1){
system.ot.print("Eins");
}
if(selector == 2){
system.ot.print("Zwei");
}
else
{
system.ot.print("UndsoWeiter");
}

Sind hier eigentlich die Klammern richtig gesetzt?
______________________________________________________________________

Die folgenden Programmzeilen stammen aus einem Java-Programm.
if (a==b)
if(b!=c)
Anweisung1;
else Anweisung2;

Welche Anweisung wird ausgeführt, wenn a=1, b=1 und c=2 ist?
Anweisung 1

Welche Anweisung wird ausgeführt, wenn a=1, b=2 und c=2 ist?
Anweisung 2

Ist es normal dass bei den vorgegebenen code bei den if bedingungen keine klammern gesetzt sind?
______________________________________________________________________

Finden Sie eine sinnvolle Einrückung für folgenden Java-Quelltext-Ausschnitt: (Gehen Sie davon aus, dass alle verwendeten Bezeichner weiter oben geeignet definiert wurden.)

if(a<10)if(pointer==null)System.err.println( “Es fehlt ein Wert!”);else{s=a+b;m=a/2;}else a-10;if(s>=10) System.out.println(“s: ” + s + “ und m:” + m);

if(a<10)
if(pointer==null)
System.err.println( “Es fehlt ein Wert!”);
else{
s=a+b;
m=a/2;
}
else
a-10; ??warum stehen hier im vorgegeben code keine gescheiten klammern, ist das richtig so?

if(s>=10)
System.out.println(“s: ” + s + “ und m:” + m); auch hier sind keine geschweiten klammern, wieso?
______________________________________________________________________

Die folgenden Programmzeilen stammen aus einem Java-Programm. Welchen Wert haben ganz und i während und nach Abarbeitung der Schleife? Arbeiten Sie diese Schleife systematisch ab. Als Hilfestellung dient Ihnen die Tabelle. Tragen Sie hier die Werte vor Abarbeitung der Schleife und nach jedem Durchlauf ein.

int i = 4;
ganz = 10;

while (i++ <= 6)
ganz++;

Werte vor beginn:
ganz=10 i=4

Nach Durchlauf:
1. ganz=11 i= 4
2. ganz=12 i= 5
3. ganz=13 i= 6

Außerdem möchte ich noch wissen ob bei diesem code ->while (i++ <= 6)<- , erst geprüft wird und dann wird i um eins erhöht oder anders rum?
______________________________________________________________________

Die folgenden Programmzeilen stammen aus einem Java-Programm.

int i;
for (i=0; i<2; i++){
System.out.print(i);
}

Welche Bildschirmausgabe liefert das Programm? Nach Druchlauf 1. Ausgabe = 0/ Nach Durchlauf 2. Ausgabe = 1

Welchen Wert hat i nach Abarbeitung der Schleife?
Lösung "2"
______________________________________________________________________


Programmieren Sie eine Methode rueckwaerts(), die den Inhalt der gegebenen Reihung werte in umgekehrter Reihenfolge und mit Trennzeichen auf dem Bildschirm ausgibt. Verwenden Sie eine for-Schleife so, dass die Methode auch für Felder mit anderen Werten funktioniert. Die Ausgabe sollte für das gegebene Beispiel so aussehen: 7,3,9,2,4

int[] werte = {4,2,9,3,7};
public void rueckwaerts(){

for(i = werte.length; i<=werte.length; i--){

system.out.print(Werte[Werte.length] + ",");
}

}

Gleich noch ne dumme frage dazu. Eine Void-Methode hat doch eigentlich keinen rückgabewert.
hier werden aber werte ausgegeben. wieso ist das denn so?
mir ist schon klar, dass man mittels system.out.print werte ausgeben kann...aber trotzdem finde ich
das komisch...könnt ihr noch etwas dazu sagen....??

______________________________________________________________________

b) Deklarieren und erzeugen Sie eine zweidimensionale Reihung (Array), in der Sie zu jeder Spielfarbe (Kreuz, Pik, Herz, Karo) drei Kartenwerte (Texte) speichern können:

Meine Lösung:
string[][] karten = new string[4][4];

Tragen Sie beispielhaft den Kartenwert „König“ bei der Farbe „Herz“ in Ihre Reihung ein:

Meine Lösung:
karten[2][1]=könig;


Gegeben ist ein Zeichenkettenobjekt der Klasse String. Weisen Sie diesem Objekt den dritten Kartenwert, der bei der Farbe Kreuz in der Reihung eingetragen ist, zu: (Sie können davon ausgehen, dass der Wert in der Reihung korrekt gesetzt ist.)

string zeichenobjekt = karten [2][2];

wo ist hier der unterschied zur vorherigen aufgabe, kommt mir komisch vor???
häää.
______________________________________________________________________


Schreiben Sie ein einfaches Java-Programm Maximum.java, das ganze Zahlen über Tastatur einliest und in einer Reihung speichert. Anschließend soll die größte der eingelesenen Zahlen ermittelt und am Bildschirm ausgegeben werden. Benutzen Sie zum Einlesen ganzer Zahlen über Tastatur die Methode getInputInt(String text)aus dem Paket vfh.prog1.bib.konsole. Sie können voraussetzen, dass der Pfad zum Verzeichnis vfh.prog1.bib.konsole im CLASSPATH gesetzt wurde. Fügen Sie sparsam einige sinnvolle Kommentare ein.

import vfh.prog1.bib.konsole.*;

public class Maximum {
public static void main (string [] args)
{
int[] werte = 6;
for(i=0; i<=werte.length; i++){
Werte = konsole.getInput("Zahl?");
}

for(i=werte.length; i=werte.length; i--){
if(Werte < Werte[i-1){
werte = werte[i-1];
}
else{
System.out.print(werte);
}
______________________________________________________________________




sooooo das wars.

ich weiß ist schon extrem veil was ich hier frage, würde mich aber mega über hilfe freuen!!
:D

so dann erstmal schönes we!

ciao
java__neuling!!
 
Zuletzt bearbeitet von einem Moderator:

XHelp

Top Contributor
-> Wie lautet hier das Ergebnis?
Ich wüde sagen 253
Probier es doch einfach mal aus...
public Point (); <- ist es hier richtig das es keine Parametr gibt?
falsch, Point soll ja als Parameter kommen

Welche Ausgabe erfolgt auf dem Bildschirm nach Abarbeitung dieser Programmzeilen?
kommt mir zu einfach vor....Ausgabe ist hier "Eins", oder nicht?
Nein. Probier es doch aus.


Wandeln Sie die Verzweigung aus Teil a) in eine if – Struktur um, die bei allen denkbaren Werten für selektor dieselbe Ausgabe produziert wie die gegebene switch-Struktur:

Meine Lösung:
Falsch. Einfach mal ausprobieren, so viele Möglichkeiten gibts da nicht
Welche Anweisung wird ausgeführt, wenn a=1, b=1 und c=2 ist?
Einfach mal ausprobieren. Für Anweisungen kannst du System.out.println("Anweisung 1") nehmen
Ist es normal dass bei den vorgegebenen code bei den if bedingungen keine klammern gesetzt sind?
Ja, sonst wäre ja die Frage witzlos

Finden Sie eine sinnvolle Einrückung
Einrückung ist falsch bzw. Müll

Welchen Wert haben ganz und i während und nach Abarbeitung der Schleife?
Ausprobieren
Außerdem möchte ich noch wissen ob bei diesem code ->while (i++ <= 6)<- , erst geprüft wird und dann wird i um eins erhöht oder anders rum?
Nach dieser Vorstellung: zuerst geprüft

--- Ab hier spare ich mir die ganzen "ausprobieren" ---

Gleich noch ne dumme frage dazu. Eine Void-Methode hat doch eigentlich keinen rückgabewert.
hier werden aber werte ausgegeben. wieso ist das denn so?
Ausgabe ist nicht das gleiche wie Rückgabe
b) Deklarieren und erzeugen Sie eine zweidimensionale Reihung (Array), in der Sie zu jeder Spielfarbe (Kreuz, Pik, Herz, Karo) drei Kartenwerte (Texte) speichern können:
Warum 4x4 array?

Gegeben ist ein Zeichenkettenobjekt der Klasse String. Weisen Sie diesem Objekt den dritten Kartenwert, der bei der Farbe Kreuz in der Reihung eingetragen ist, zu:
Kreuz ist nicht an der 3. Stelle
wo ist hier der unterschied zur vorherigen aufgabe, kommt mir komisch vor???
Dem Array ein Wert zuweisen oder aus dem Array ein Wert lesen. Merkst du den Unterschied?


Und du solltest dir schleunigst angewöhnen Code in JAVA-Tags zu schreiben
 

firewarrior

Aktives Mitglied
Zu 1) Der Ausdruck ist äquivalent zu:
Code:
result = result + ((a + c) * b));
und nach dem Aufruf wird b um 1 erhöht. (siehe Post- und Präinkrement). Daher ist das Ergebnis 185

Zu 2) Stimmt.

Zu 3) Der erste Konstruktor stimmt so, der zweite imho so:
Code:
public Line(Point p1, Point p2) { ... }

Zu 4) Stimmt, aber Variablennamen bitte kleingeschrieben
Code:
int zahl

Zu 5) Nein, es erscheint 'EinsZwei', da bei
Code:
case 1:
kein
Code:
break
steht. Schau dir die Regeln des switch Statements nochmal an.

Zu 6) Eher so:
Java:
if (selektor == 0) {
			System.out.print("NullEinsZwei");
		} else if (selektor == 1) {
			System.out.print("EinsZwei");
		} else if (selektor == 2) {
			System.out.print("Zwei");
		} else {
			System.out.print("UndSoWeiter");
		}
Zu 7) Für den ersten Fall liegst du richtig, beim zweiten Fall wird keine der beiden Anweisungen ausgeführt. Schau dir mal das an. (Da wird auch der switch beschrieben)

Zu 8)
Java:
if (a<10)
			if (pointer==null)
				System.err.println( “Es fehlt ein Wert!”);
			else {
				s=a+b;m=a/2;
			}
		else
			a-10;
		if (s>=10) 
			System.out.println(“s: ” + s + “ und m:” + m);
Schau dir obigen Link an!

Zu 9) Schau dir das zu Prä- und Postinkrement an ;)

Zu 10) Stimmt. Ausgabe ist also:
Code:
01

Zu 11)
Java:
public void rueckwaerts(int[] werte) {
		for(int i = werte.length - 1; i > 0; i--) {
			System.out.print(werte[i] + ", ");
		}
		System.out.print(werte[0]);
	}
Dabei gehe ich davon aus, dass der Array nicht leer ist.
Zu deiner Frage mit
Code:
void
: Die Methode selbst gibt an den keinen Wert zurück, sondern schreibt etwas auf die Standardausgabe (in dem Fall die Konsole) System.out

Zu 12)
Java:
String[][] karten = new String[4][3]; //Achtung: String mit großem 'S'
karten[2][0] = "König";

Zu 13)
Code:
String zeichenobjekt = karten[0][2];
Beachte: der erste Index ist immer 0.

Zu 14) Erstmal dein Code mit ein paar Anmerkungen...
Java:
public class Maximum {
public static void main (string [] args) // Es heisst immer noch String (großes 'S')
{
int[] werte = 6; // Du willst einem uninitialisiertem int Array einen int Werten zuweisen?
for(i=0; i<=werte.length; i++){ // was soll 'i' denn sein? sollte 'int i = 0' sein. Außerdem 'i < werte.length' sonst fliegt ne Exception.
Werte [i] = konsole.getInput("Zahl?"); // Achte auf Groß- bzw. Kleinschreibung. Was soll 'Werte' denn sein? Etwa 'werte'?
}

for(i=werte.length; i=werte.length; i--){ // Schon wieder. Was ist 'i'? Was ist das für ne Abbruchbedingung? Verglichen wird mit '=='
if(Werte[i] < Werte[i-1){  //Groß- bzw. Kleinschreibung
werte[i] = werte[i-1];
}
else{
System.out.print(werte[i]);
}

Mal meine Version:
Java:
public class Maximum {
	
	public static void main(String[] args) {
		// Ich kenne die Methode getInput(String text) nicht, also gehe ich davon aus, dass int[] numbers initialisiert ist.
		int[] numbers = {1, 2, 3, 4, 5, 6};
		int maximum = numbers[0];
		for(int i = 1; i < numbers.length; i++) {
			maximum = (numbers[i] > maximum) ? numbers[i] : maximum;
		}
		System.out.println(maximum);
	}
}
 
H

Herr K.

Gast
Hi,

gleich mal zwei Anmerkungen vorab, wenn jmd. beurteilen soll ob Deine Gedankengänge richtig sind, dann wäre es sinnvoll eine Glaskugel an den Thread anzuhängen, alternativ musst Du die sonst schon noch mitteilen, nicht nur die Lösungen.
Das andere ist, Dein Thread erschlägt einen mit einer Masse an Fragen, es wäre sinnvoll die mindestens zu nummerieren, damit man gezielt zu 1, zu 2 oder zu x etwas sagen kann. So wird kaum einer sich die Mühe machen alles durchzugehen und richtig oder falsch zu sagen.

Deine Fragen lassen sich doch teilweise einfach durch einen Java-Compiler lösen, z.B. die ersten Rechnungen. Wenn Du hier auf eine andere Lösung kommst (jetzt nur im Kopf wäre für mit das erste Ergebnis nicht 253), dann kannst Du ja auch gezielt nachfragen (warum Du denkst dass da 253 rauskommst und was Du nicht verstehst).

Zu einem Teil Deiner Fragen:
public Point (); <- ist es hier richtig das es keine Parametr gibt?
Das ist nicht die Frage. Dort sollst Du zwei Konstruktoren für eine Linie angeben. Ein Punkt könnte ja z.B. aus einer X und einer Y Position bestehen, das wären ja gerade zwei Zahlen...

Welche Ausgabe erfolgt auf dem Bildschirm nach Abarbeitung dieser Programmzeilen?
kommt mir zu einfach vor....Ausgabe ist hier "Eins", oder nicht?
Die Ausgabe wäre "Eins Zwei", da Du ein fall-through hast. Alles was dem Fall folgt, der beim Switch zutrifft wird abgearbeitet, bis ein break oder return die Struktur verlässt oder diese zuende ist.

Wandeln Sie die Verzweigung aus Teil a) in eine if – Struktur um, die bei allen denkbaren Werten für selektor dieselbe Ausgabe produziert wie die gegebene switch-Struktur:
Die Klammern sind korrekt, ABER:
  1. Es heißt System.out. nicht system.ot (auch Groß-/Kleinschreibung beachten!)
  2. "Eins Zwei" berücksichtigen
  3. Du musst "else if" benutzen, ist if (selector == 0){ war, dann kann der nächste Fall gar nicht zutreffen. Problematisch ist aber, ein reines else bezieht sich auf das übergeordnete if, in Deinem Fall wird else also nur bearbeitet wenn der Wert von Selektor nicht 2 ist (das ist eigentlich nicht das was Du möchtest, auch wenn es hier zum gleichen Ergebnis führt).

    Ist es normal dass bei den vorgegebenen code bei den if bedingungen keine klammern gesetzt sind?

    Jein, für eine Übungsklausur ist das Wichtig, denn Du musst überlegen worauf sich das else bezieht, auf das obere oder untere if. Setzt Du die Klammern ist die Semantik halt bestimmt. Ich denke (solltest Du aber nochmal prüfen), dass die Konstruktion semantisch equivalent zu folgendem wäre:
    Java:
    if (a==b) {
      if(b!=c) {
        Anweisung1; 
      }
      else {
        Anweisung2;
      }
    }

    Anders gesagt würde für den zweiten Fall keine Anweisung ausgeführt werden.

    Finden Sie eine sinnvolle Einrückung für folgenden Java-Quelltext-Ausschnitt: (Gehen Sie davon aus, dass alle verwendeten Bezeichner weiter oben geeignet definiert wurden.)

    if(a<10)if(pointer==null)System.err.println( “Es fehlt ein Wert!”);else{s=a+b;m=a/2;}else a-10;if(s>=10) System.out.println(“s: ” + s + “ und m:” + m);

    Wieder sind die Klammern nicht dar, um zu schauen ob Du richtig zuordnen kannst. Nebenbei heißt Einrückung auch, dass Du die Teile nach rechts verschiebst, die nur unter der oberen (weiter links stehenden) Bedingung bearbeitet werden, richtiger wäre wohl eher:
    Java:
    if (a < 10) 
      if (pointer == null) 
        System.err.println("Es fehlt ein Wert!");
      else {
        s=a+b;
        m=a/2;
      }
    else 
      a-10;
    if(s>=10) 
      System.out.println(“s: ” + s + “ und m:” + m);

    Vergleich einfach mal die beiden else-Positionen oder so, dann siehst Du deutlicher worauf sich welches else bezieht. Die geschweiften Klammern fassen Blöcke zusammen und die sollte man auch immer verwenden. Trotzdem ist es erlaubt (wenn auch kein guter Stil) die wegzulassen. Dann wird nur genau die nächste Anweisung ausgewertet.
    Java:
    if (false) 
    System.out.println("Bli");System.out.println("Blubb"); // Gibt "Blubb" aus
    
    if (false) {
      System.out.println("Bli");
      System.out.println("Blubb"); 
    }// Gibt nichts aus

    int[] werte = {4,2,9,3,7};
    public void rueckwaerts(){

    for(i = werte.length; i<=werte.length; i--){

    system.out.print(Werte[Werte.length] + ",");
    }

    }

    Das ist so ziemlich ganz falsch. fangen wir mit der Schleife an, Du hast eine Liste der Länge 5 (werte.length), Deine Schleife sagt jetzt: i wird 5, solange i kleiner oder gleich 5, führe die Schleife aus und dekrementiere i. Klar, die Bedingung trifft zu, Du ziehst eins ab, dann ist i = 4 und Du ziehst eins ab, ... i = 1 und Du ziehst eins ab, ... i = -82.727 und Du ziehst eins ab...

    Du hast hier keine sinnvolle Abbruchbedingung gewählt. Wann soll denn Schluss sein? Du hast hier zwei Möglichkeiten, entweder fängst Du bei der maximalen Länge - 1 an (Felder sind 0 indiziert, der Index läuft also von 0 bis 4) oder Du zählst von 0 bis 4 hoch und greifst in der Schleife von hinten zu.
    Im Schleifenkörper stimmt die Groß-/Kleinschreibung nicht. System wird groß, Werte klein geschrieben. Aber wo bleibt Dein i? Du gibst hier konstant den Wert aus, der im Feld werte an der Stelle 5 steht (den gibt es nicht, die Indizes laufen von 0 bis 4!).
    Richtig wäre hier eher:
    Java:
    int[] werte = {4,2,9,3,7}; 
    public void rueckwaerts(){
      for(i = werte.length - 1; i>=0; i--){
        System.out.print(werte[i] + ",");
      }
    }
 

java__neuling

Aktives Mitglied
erstmal besten dank für die viele hilfe.

gut habe verstanden werde nun mal meinen rechenwerk aufzeigen.

es geht um folgende aufgabe:

Java:
int result;
int a = 13, b = 10, c = 5, d = 6;
result = 5;
result += (a + c) * b++;

Das richtige Ergebnis ist 185 leider komme ich aber immer auf 186. Ich weiß nicht was ich falsch mache...

Hier mein Rechenweg:
Java:
result = result + (a+c)*b+1;
result = 5+(13+5)*10+1;
result = 5+(18)*10+1;
5+180+1 =186;

Auch bei dieser Aufgabe mache ich etwas falsch
Java:
result = b * --a - c * d;

Das richtige Ergebnis ist 102 ich komme aber immer auf 112:
Mein Lösungsweg sieht hier folgendermaßen aus:

Java:
result = b * a-1-c*d;
result = 11 * 13 - 1 - 5 * 6;
result = 143-1-30

schon einmal besten dank an euch alle!
 

XHelp

Top Contributor
Schau dir noch mal
Code:
x++
und
Code:
++x
an, und wann sich die Variablen ändern
 

java__neuling

Aktives Mitglied
okay, danke also bei der aufgabe
Java:
result = b * --a - c * d;
leuchtet mir da ein.

habe es jetzt so verstanden, dass a nun erst im 1 verringert wird bevor es mit b multipliziert wird.
-> wunderbar, so komme ich auch auf das richtige ergebnis.

ABER...

wie das ergbenis der folgenden aufgabe zu standen kommt weiß ich immer noch nicht
Java:
result += (a + c) * b++;

hier ist es doch so, das erst am ende 1 addiert wird. aber wenn ich das mache komme ich immer auf 186.
ist aber immer noch einer zu viel....darf ich die 1 gar nicht addieren....???:L

wäre toll wenn ich noch einmal helfen könntet!
DANKE!
 

Painii

Bekanntes Mitglied
wie das ergbenis der folgenden aufgabe zu standen kommt weiß ich immer noch nicht
Java:
result += (a + c) * b++;

hier ist es doch so, das erst am ende 1 addiert wird. aber wenn ich das mache komme ich immer auf 186.
ist aber immer noch einer zu viel....darf ich die 1 gar nicht addieren....???:L

Bau dir das ganze um:
result = result + (a + c) * b;
b=b+1;

Also, die 1 wird auf das b addiert, result wird nicht dadurch beeinflusst!
 

java__neuling

Aktives Mitglied
ja....stimmt schon mittlweile stelle ich fest, dass eswohl doch nicht so eine gute idee war für die ganzen fragen nur ein topic zu erstellen....

wollte aber auch nicht gleich 20 topics eröffnen.

nichts desto trotz habe ich noch eine frage zu folgender aufgabe:

Java:
if (a==b) 
  if(b!=c) 
    Anweisung1; 
  
  else 
    Anweisung2;

Wenn folgende Werte vorgegeben sind "A=1/ B=2/ C=2" wird keine Anweisung ausgeführt.
Warum? Weil, dadruch, dass die erste if bedinung flasch ist kommt es erst gar nicht zu überprüfung der zweiten if bedinung, stimmt das so?

DANKE!
 

java__neuling

Aktives Mitglied
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben