Java Anfänger Aufgabe - 4-5 Zeilen Code fehlen..

Status
Für weitere Antworten geschlossen.

FreddyCollin

Ensign
Registriert
Dez. 2014
Beiträge
236
Hi, bin Anfänger und arbeite mich grade durch Übungsaufgaben. Nun weiß ich aber nicht weiter, da es eine der ersten Klassen ist die ich schreibe... Die erste Aufgabe lautet wie folgt:

Setzen Sie die durch das folgende UML-Klassendiagramm spezifizierte Klasse Stadt in eine
entsprechende Java-Klasse um (am PC in Eclipse). [#1]

xy5svq.jpg

Fügen Sie der Klasse einen Standard-Konstruktor und eine main()-Methode hinzu, die ein Objekt
der Klasse erzeugt [#2] und für dieses die Methode gebeBeschreibungAus() aufruft. Diese Methode
soll am Bildschirm (auf der Konsole) eine Textzeile der Form
name ist eine Stadtbezeichnung mit einwohnerZahl Einwohnern.“
ausgeben. [#3]
Dabei werden die kursiv gedruckten Begriffe in diesem Text in der Bildschirmausgabe
jeweils mit den Werten der entsprechenden Attributvariablen ersetzt.
Für den Begriff Stadtbezeichnung wird für Städte mit weniger als 100000 Einwohnern „Stadt“, sonst „Großstadt“
ausgegeben. Ist die Stadt jedoch eine Kreisstadt, so wird statt dessen „Kreisstadt“ bzw. „große
Kreisstadt“ als Stadtbezeichnung ausgegeben. [#4]



Mein Code:
Code:
public class Stadt {

	//Variablen Deklaration
	String name;
	int einwohnerZahl;
	boolean istKreisstadt;
	
	//Standard-Konstruktor
	public Stadt(String name, int einwohnerZahl, boolean istKreisstadt) {
		super();
		this.name = name;
		this.einwohnerZahl = einwohnerZahl;
		this.istKreisstadt = istKreisstadt;
	}
	
	//Main-Methode 
	public static void main(String[] args){
		
		Stadt ulm = new Stadt("ulm", 150000, false);
		
	}
	
	public gebeBeschreibungAus();
	
	
	
}

Bis Schritt #2 bin ich gekommen und habe glaube ich auch keinen Fehler gemacht. Nun weiß ich nicht genau wie es weiter geht mit #3 und #4... die gebeBeschreibungAus()-Methode hab ich nur mal iwie deklariert und #4 ahne ich nur wie ich zu bearbeiten hab (vmtl mit einer if schleife?) aber ich weiß nicht genau wie ich dann alles verkette... Könnte mir jemand 3 und 4 zufügen mit ein paar kurzen, erklärenden worten versehen? Wäre super lieb! Ich zahl zur Not auch dafür... Es ist schrecklich niemand zu haben der mich korrigiert :(
 
Zuletzt bearbeitet:
du musst eine if/else abfrage machen wie groß die stadt ist und je nachdem die stadt wie gefordert benennen.

an gebeBeschreibungAus(); kannst du den stadtnamen, z.b. ulm übergeben.
 
Ich gebe dir mal einen Tipp:

Mit system.out.println("Hier steht der Ausgabetext"); kannst du auf der Konsole Ausgaben erzeugen.
Und welche Stadtgröße du ausgibst kannst du z.B. über eine if-Abfrage lösen.
Also if Einwohner kleiner X und nicht größer als Y, dann Stadt,
else if Einwohner ....

versuch es mal.

Am besten lernst du, wenn du dir etwas Gedanken machst. ;)

Viel Spass dabei
 
Danke Leute, ich werde mal mein bestes geben und hier per //EDIT mein Ergebnis posten! :)
 
Kleine Hinweis bzw. Korrektur noch zu deinem Code. Die Variablen name, einwohnerZahl, istKreisstadt sollen laut dem UML-Diagramm "Privat" (-) sein.
 
Code:
public class Stadt {

	//Variablen Deklaration
	String name;
	int einwohnerZahl;
	boolean istKreisstadt;
	String Stadtbezeichnung;
	
	
	
	//Standard-Konstruktor
	public Stadt(String name, int einwohnerZahl, boolean istKreisstadt) {
		super();
		this.name = name;
		this.einwohnerZahl = einwohnerZahl;
		this.istKreisstadt = istKreisstadt;
		
	}
	
	//Main-Methode 
	public static void main(String[] args){
		
		Stadt ulm = new Stadt("ulm", 150000, false);
		
	}
	
	
	
	public String gebeBeschreibungAus() {
		System.out.println(name+ " ist eine " Stadtbezeichnung " mit " einwohnerZahl " Einwohnern.");
		
	}
	
	
	
	if (einwohnerZahl < 100000) {
		
		String Stadtbezeichnung="Stadt";
	}
	else {
		String Stadtbezeichnung="Großstadt";
	}
	
	if (istKreisstadt=true && einwohnerZahl < 100000) {
		String Stadtbezeichnung="Kreisstadt";
	}
	else {
		String Stadtbezeichnung="Große Kreisstadt";
	}
	
}
}

Soweit bin ich gekommen. Nun ist mir folgendes klar:
- Private statt Public muss geändert werden
- In der Methode:
public String gebeBeschreibungAus() {
System.out.println(name+ " ist eine " Stadtbezeichnung " mit " einwohnerZahl " Einwohnern.");

}
Stecken Syntax-Error.
- Die Verknüpfung der einzelnen Bestandteile ist nonexistent.


Kann mir jemand weiter helfen oder ist es eine zu große Katastrophe und ich soll alles neu versuchen?
 
FreddyCollin schrieb:
- In der Methode:

Stecken Syntax-Error.
- Die Verknüpfung der einzelnen Bestandteile ist nonexistent.


Kann mir jemand weiter helfen oder ist es eine zu große Katastrophe und ich soll alles neu versuchen?

Hier fehlt der Operator. Stichwort: string konkatenation

Der Methode fehlt außerdem die Rückgabe, wobei die Aufgabe keinen Rückgabewert fordert. Und der If-Ausdruck muss auch in die Methode...
 
Entweder du baust die gesamte Logik, also die Wahl der Stadtbezeichnung und die Ausgabe des Strings, in die gebeBeschreibungAus() Methode. Oder du machst dir eine eigene Methode, die die Stadbezeichnung als String zurückgibt und von der gebeBeschreibungAus() Methode aufgerufen wird.

Die gebeBeschreibungAus() wird innerhalb der main(...) Methode aufgerufen, denn die wird aufgerufen, wenn du die Klasse ausführst.

Und dann noch, weil du einen String mit mehreren Variablen ausgeben sollst, bietet sich die System.out.printf(...) Methode an. Ist schöner und übersichtlicher, als den String manuell zu verketten.
http://examples.javacodegeeks.com/core-java/lang/string/java-string-format-example
 
Zuletzt bearbeitet:
Hier haben einige + Zeichen gefehlt. Ansonsten wirft es bestimmt Fehlermeldungen.
Code:
	public String gebeBeschreibungAus() {
		System.out.println(name + " ist eine " + Stadtbezeichnung + " mit " + einwohnerZahl + " Einwohnern.");
	}
}


Desweiteren musst du den Code hier:

Code:
		if (einwohnerZahl < 100000) {
		
			String Stadtbezeichnung="Stadt";
		}
		else {
			String Stadtbezeichnung="Großstadt";
		}
	
		if (istKreisstadt=true && einwohnerZahl < 100000) {
			String Stadtbezeichnung="Kreisstadt";
		}
		else {
			String Stadtbezeichnung="Große Kreisstadt";
		}
irgendwo in eine Methode packen und auch irgendwo aufrufen.

Weiter brauchst du die Variable Stadtbezeichnung nicht jedesmal neu erzeugen. Das dürfte ebenfalls nicht passen. Einfach eine Zuweisung machen und gut ist (Stadtbezeichnung = "Stadt"; [und so weiter])

Bei Boolean-Variablen musst du nicht abfragen "istKleinstadt == true" (hier fehlt übrigens ein zweites Gleichheitszeigen!), hier reicht es wenn du
Code:
if (istKreisstadt && einwohnerZahl < 100000)
Damit sagst du wenn es eine Kreisstadt ist und weniger als 100k Einwohner hat, dann .... sonst ....
Wenn du "istKleinstadt == false" abfragen willst gehts kürzer so:
Code:
if (!istKleinstadt && einwohnerZahl < 100000)


EDIT:
Warum hat gebeBeschreibungAus() einen Rückgabewert? Das einzige was du damit machst ist Text auf der Konsole anzuzeigen? Da kannst du also problemlos public void gebeBeschreibungAus() verwenden.
 
Zuletzt bearbeitet:
Wow, vielen dank für deine ausführliche Antwort! Hat mir wirklich maßgeblich geholfen!
Nun ist es fehlerfrei und die methode wird in der main abgerufen für die Stadt ulm... (bin ganz stolz darauf, dass geschafft zu haben^^). Falls jemand (abgesehen vom untenstehenden (kursiv) sieht, was falsch ist, bitte sagen!

Die Ausgabe zeigt mir nun aber an
ulm ist eine null mit 150000 Einwohnern.
- zwar ist ulm wirklich ne ziemliche null (:p) trzd ist die Ausgabe wohl falsch. Ich will an dieser Stelle selbst den Fehler finden und beiseite schaffen. Nur eine Rückfrage: Der Fehler kommt durch eine fehlerhafte Schleife zu stande oder? Ich hab bisher nur If-Schleifen gecoded mit einer Bedingung, deshalb grade so meine Problemchen. (Nur damit ich jetzt nicht mein Augenmerk komplett auf die If-Schleife richte und es dann woanders dran liegt)



Code:
public class Stadt {

	//Variablen Deklaration
	String name;
	int einwohnerZahl;
	boolean istKreisstadt;
	String Stadtbezeichnung;
	
	
	
	//Standard-Konstruktor
	public Stadt(String name, int einwohnerZahl, boolean istKreisstadt) {
		super();
		this.name = name;
		this.einwohnerZahl = einwohnerZahl;
		this.istKreisstadt = istKreisstadt;
		
	}
	
	//Main-Methode 
	public static void main(String[] args){
		Stadt ulm = new Stadt("ulm", 150000, false);
		ulm.gebeBeschreibungAus();
	}
	
	
	
	public void gebeBeschreibungAus() {
		System.out.println(name + " ist eine " + Stadtbezeichnung + " mit " + einwohnerZahl + " Einwohnern.");
				
		if (einwohnerZahl < 100000) {
			
			Stadtbezeichnung="Stadt";
		}
		else {
			 Stadtbezeichnung="Großstadt";
		}
		
		if (!istKreisstadt && einwohnerZahl < 100000) {
			 Stadtbezeichnung="Kreisstadt";
		}
		else {
			Stadtbezeichnung="Große Kreisstadt";
		}
	}
	
	
	

}
 
svenie25 schrieb:
Schreib mal in gebeBeschreibungAus die Ausgabe unter die beiden if´s.

Danke! Hat geklappt.. Jetzt sagt er mir nur leider immer dass es eine große Kreisstadt sei.
 
Zuletzt bearbeitet:
FreddyCollin schrieb:
Danke! Hat geklappt.. Jetzt sagt er mir nur leider immer dass es eine große Kreisstadt sei.

du sagst durch die if-bedingung ja auch immer "istKreisstadt = false" bzw. dass es eine große kreisstadt ist

du kannst auch einen switch einbauen

Code:
istKreisstadt = "bla bla";
string i = istKreisstadt;

switch(i){

        case "Kreisstadt":
            System.out.println("Kreisstadt");
            break;

        case "Große Kreisstadt":
            System.out.println("Große Kreisstadt");
            break;

        default:
            System.out.println("Der Switch läuft nicht");
        }
 
Zuletzt bearbeitet:
Dein "if-Schleife" ist in der Mitte unterbrochen. Dadurch wird das, was du im ersten Teil zugewiesen hast, im 2. Teil immer überschrieben.
Du musst schon immer einwohnerZahl und istKreisstadt zusammen abfragen oder du baust eine verschachtelte if-Anweisung.

Das mit dem switch ist Mist und hilft hier nicht wirklich weiter.
 
Wie bereits oben angemerkt ist deine if-Schleife noch nicht richtig implementiert.

Aber du kannst eine If-Auswahl beliebig verlängern.
Code:
//Hier werden alle Bedinungen der Reihe nach durchgeprüft
//Nach dem ersten Treffer wird abgebrochen

if (Bedingung) 
{
             //Anwiesung 
}
else if (Bedingung) 
{
           //Anweisung 
}
else 
{
           //Wenn alles andere nicht zutrifft
}

Versuch deine Prüfbedinungen mal damit aufzubauen. Du kannst beliebig viele else if einfügen.

Das oben genannte switch-case ist auch eine Methode um Werte zu überprüfen. Aber das muss dich vorerst nicht belasten. Damit befasst du dich später zu 100% noch.
 
Nochmals eine kleine Anmerkung: If-Schleife ist falsch. Schleifen sind "Do while", "While" und "For".
 
Bitte beachte unsere Regeln. Hausaufgabenhilfe ist hier gemäß Regeln nicht erwünscht. Mach dir selbst etwas Gedanken, dann bekommst du das hin.
Zensai
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben