CodeGym
Promotion
CodeGym University
Lernen
Kurs
Aufgaben
Umfragen & Quizze
Spiele
Hilfe
Zeitplan für einen Tritt in den Hintern
Community
Benutzer
Forum
Chat
Artikel
Erfolgsstorys
Aktivität
Rezensionen
Abonnements
Helles Design
Frage
  • Rezensionen
  • Über uns
Start
Jetzt lernen
Jetzt lernen
  • Alle Fragen
hidden #10625598
Level 23
  • 05.06.2020
  • 398Aufrufe
  • 6Kommentare

hey, wie funktioniert die getClass().getSimpleName funktion? bzw was muss ich wechseln?

Frage zur Aufgabe Filmfabrik
Java Core,  Level 4,  Lektion 8
In der Diskussion


Lies von der Konsole, um die Funktionalität per Analogie zu erweitern:
1. Finde heraus, was das Programm macht.
2. Alle Klassen müssen sich innerhalb der Solution-Klasse befinden.
3. Füge die Klassen Cartoon und Thriller hinzu.
4. Versuche nachzuvollziehen, wie wir ein SoapOpera-Objekt mithilfe des Schlüssels „soapOpera“ erhalten.

Folge dem Muster zum Abrufen eines SoapOpera-Objekts und:
5. Füge MovieFactory.getMovie die Fähigkeit zum Abrufen eines Cartoon-Objekts mithilfe des Schlüssels „cartoon“ hinzu.
6. Füge MovieFactory.getMovie die Fähigkeit zum Abrufen eines Thriller-Objekts mithilfe des Schlüssels „thriller“ hinzu.
7. Lies verschiedene Schlüssel (Zeichenketten) von der Konsole.
7.1. Beende das Einlesen von Zeichenketten, sobald eine Zeichenkette eingegeben wird, die nicht einer der folgenden entspricht: „cartoon“, „thriller“, „soapOpera“.
8. Erstelle die Movie-Variable movie und führe folgendes für jede eingegebene Zeichenkette (Schlüssel) aus:
8.1. Rufe mit MovieFactory.getMovie ein Objekt ab und weise es der Variable movie zu.
8.2. Zeige das Ergebnis des Aufrufs von movie.getClass().getSimpleName() an.

Anforderungen:
  • Die Klassen Cartoon und Thriller müssen static sein und sich innerhalb der Solution-Klasse befinden.
  • Die Methode MovieFactory.getMovie muss ein Cartoon-Objekt zurückgeben, wenn „cartoon“ als Parameter übergeben wird.
  • Die Methode MovieFactory.getMovie muss ein Thriller-Objekt zurückgeben, wenn „thriller“ als Parameter übergeben wird.
  • Die main-Methode muss Zeichenketten von der Tastatur lesen.
  • Die main-Methode muss das Lesen von Zeichenketten von der Tastatur beenden, wenn eine ungültige Zeichenkette eingegeben wird (d.h. etwas anderes als „cartoon“, „thriller“ oder „soapOpera“).
  • Für jede eingegebene Zeichenkette (einschließlich der ungültigen Zeichenkette) musst du die Methode MovieFactory.getMovie aufrufen.
  • Für jede gültige Zeichenkette, die eingegeben wird, musst du den einfachen Namen (movie.getClass().getSimpleName()) der Objekttypen anzeigen, die von der Methode MovieFactory.getMovie zurückgegeben werden.
package de.codegym.task.task14.task1414; /* Filmfabrik */ import java.io.*; public class Solution { public static void main(String[] args) throws Exception { // Mehrere Schlüssel (Zeichenketten) von der Konsole lesen. Element 7 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String key = null; while(true){ key = reader.readLine(); if(key.equals("cartoon")){ MovieFactory.getMovie(key); }else if(key.equals("soapOpera")){ MovieFactory.getMovie(key); }else if(key.equals("thriller")){ MovieFactory.getMovie(key); }else{ MovieFactory.getMovie(key); break; } } System.out.println(movie.getClass().getSimpleName()); } static class MovieFactory { static Movie getMovie(String key) { Movie movie = null; if ("soapOpera".equals(key)) { movie = new SoapOpera(); }else if ("cartoon".equals(key)){ movie = new Cartoon(); }else if("thriller".equals(key)){ movie = new Thriller(); } return movie; } } static abstract class Movie { public String getName(){ return "film"; } } static class SoapOpera extends Movie { public String getName(){ return "sopa"; } } static class Cartoon extends Movie { public String getName(){ return "carto"; } } static class Thriller extends Movie { public String getName(){ return "thril"; } } }
0
Kommentare (6)
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Thomas
Level 41 , Bayreuth, Germany
5 Juni 2020, 19:02
Schau mal hier: https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
0
hidden #10625598
Level 23
5 Juni 2020, 20:04
thomas, ich programmiere seit 5 Wochen, das ist eindeutig eine totale informations Überdosis, ich kann verstehen dass man diese Sachen in lv24 als logisch empfindet, und auch dass man vielleicht denkt mit lv14 "sollte" man das verstehen, - tue ich aber nicht wirklich. ich brauche lange bis ich Sachen begreife. Ich wäre dir sehr verbunden wenn du ein bisschen mehr Lösung in deine Antwort verpackst :) schon weil du dir die mühe gibst meinen Code zu lesen und zu antworten :) wofür ich äusserst dankbar bin, by the way
0
Thomas
Level 41 , Bayreuth, Germany
5 Juni 2020, 20:18
haha, OK, aber da gibt es nicht viel zu sagen. Oder auch sehr viel, je nachdem, was man wissen will. Jedenfalls, wenn du das mal ausprobierst, spuckt getClass() aufgerufen auf einem Objekt, den Klassennamen aus, inkl. Package. Also beispielsweise java.lang.String Hängt man noch ein getSimpleName() dran, bekommt man String Das Ganze ghört zur Reflection API. Dazu kommt später noch mehr.
0
hidden #10625598
Level 23
5 Juni 2020, 20:32
momentan spuckt alles was ich probiere: non-static method getClass() cannot be referenced from a static context - aus..
0
Thomas
Level 41 , Bayreuth, Germany
5 Juni 2020, 20:49
Du musst getClass ja auch auf ein Objekt aufrufen, z.B. System.out.println(new String().getClass()); Bei dir in der main schreibst du movie.getClass() aber movie ist dort nirgendwo deklariert (oder nicht so, dass mir das aufflallen würde). Am Ende heißt das einfach, dass du eine variable movie in main deklarieren musst, am Besten auch gleich initialisieren. Movie movie = MovieFactory.getMovie(key); Wenn die dann nicht null ist ( if (movie != null) .. ) dann kannst du auf movie getClass() aufrufen. Danach solltest du die Abbruchbedingungen testen und gegebenenfalls aus der Schleife ausbrechen.
0
hidden #10625598
Level 23
6 Juni 2020, 03:52
perfekt! danke! :) das ganze in die while-schleife packen und es funktioniert
0
Lernen
  • Registrierung
  • Java-Kurs
  • Hilfe zu Aufgaben
  • Preise
  • Spieleprojekte
  • Java Syntax
Community
  • Benutzer
  • Artikel
  • Forum
  • Chat
  • Erfolgsstorys
  • Aktivität
  • Affiliate Program
Unternehmen
  • Über uns
  • Kontakt
  • Rezensionen
  • Medien
  • CodeGym im Bildungsbereich
  • FAQ
  • Support
CodeGym CodeGym ist ein Java-Tutorial zum Lernen von Java von Grund auf. Dieser Kurs ist perfekt dafür geeignet, Java von Beginn an zu meistern. Er enthält über 1200 Aufgaben mit Sofortüberprüfung und grundlegende Theorie zu den Java-Grundlagen. Damit auch du bei deinem Kurs erfolgreich bist, haben wir eine ganze Reihe motivierender Inhalte: Quizfragen, Programmierprojekte, Inhalte zu effizientem Lernen und zum Berufseinstieg als Java-Entwickler.
Folgen
Sprache der Oberfläche
Programmierer werden gemacht, nicht geboren © 2023 CodeGym
MastercardVisa
Programmierer werden gemacht, nicht geboren © 2023 CodeGym
This website uses cookies to provide you with personalized service. By using this website, you agree to our use of cookies. If you require more details, please read our Terms and Policy.