Java Wie krieg ich dieses Programm zum laufen?

ChAiN SaW

Lt. Commander
Registriert
Apr. 2011
Beiträge
1.059
Mahlzeit,
ich hatte am Anfang des Studiums mal ein Programm geschrieben, es war recht simpel aber hat funktioniert. Nun wollte ich dieses Programm wieder zum laufen bekommen, jedoch bekomme ich das Programm in Eclipse leider nicht mehr zum laufen!

Kann mir jmd helfen das zum laufen zu bekommen bzw. falls es an Eclipse liegt, ein alternatives Programm zu finden?

FSK.java
Code:
import java.util.ArrayList;
import java.util.List;

public enum FSK {

  FSK6, FSK12, FSK16, FSK18;

  public static List<FSK> getFSKList(int age) {
    List<FSK> list = new ArrayList<FSK>();
    if (age >= 6)
      list.add(FSK6);
    if (age >= 12)
      list.add(FSK12);
    if (age >= 16)
      list.add(FSK16);
    if (age >= 18)
      list.add(FSK18);
    return list;
  }

}

Movie.java
Code:
class Movie {
  public final String name;
  public final FSK fsk;
  private int serial = 0;
  private boolean isRent = false;
  
  public Movie(String name, FSK fsk) {
    this.name = name;
    this.fsk = fsk;
  }

  public Movie(Movie other) {
    this.name = other.name;
    this.fsk = other.fsk;
    this.serial = other.serial;
  }

  public void setSerial(int serial) {
    this.serial = serial;
  }

  public int getSerial() {
    return serial;
  }

  public boolean rent() {
    if (isRent)
      return false;
    isRent = true;
    return true;
  }

  public void giveBack() {
    isRent = false;
  }

  public boolean isAvailable() {
    return !isRent;
  }

  @Override
  public String toString() {
    return serial + ". "+ name + " (" + fsk + ")";
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (!(o instanceof Movie)) {
      return false;
    }
    Movie other = (Movie) o;
    return name.equals(other.name);
  }

  @Override
  public int hashCode() {
    int hash = 5;
    hash = 41 * hash + (this.name != null ? this.name.hashCode() : 0);
    return hash;
  }

}

MovieStore.java

Code:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class MovieStore {
  private List<Movie> movies;
  private int serial = 0;

  public MovieStore() {
    movies = new ArrayList<Movie>();
  }

  public boolean add(Movie movie) {
    if (movies.contains(movie))
      return false;
    movie.setSerial(++serial);
    return movies.add(movie);
  }

  public List<Movie> getMovies() {
    List<Movie> copy = new ArrayList<Movie>();
    for (Movie movie : movies)
      copy.add(new Movie(movie));
    return copy;
  }
  
  public Movie rentMovie(int serial) {
    Movie movieToRent = null;
    boolean found = false;
    for (Movie movie : movies) {
      if (!found && movie.getSerial() == serial) {
        found = true;
        movieToRent = movie;
      }
    }
    if (movieToRent == null)
      return null;
    boolean success = movieToRent.rent();
    if (success)
      return movieToRent;
    return null;
  }

  public void printAvailableMovies(int age) {
    List<FSK> fskList = FSK.getFSKList(age);
    for (Movie movie : movies) {
      if (movie.isAvailable() && fskList.contains(movie.fsk))
        System.out.println(movie);
    }
  }

  public static void main(String[] args) {
    MovieStore movieStore = new MovieStore();
    movieStore.add(new Movie("Am Limit", FSK.FSK6));
    movieStore.add(new Movie("Kill Bill vol. 1", FSK.FSK18));
    movieStore.add(new Movie("Matrix", FSK.FSK16));

    while (true) {
      Scanner in = new Scanner(System.in);
      System.out.print("Filme bis zu welchem Alter? ");
      int age = in.nextInt();
      movieStore.printAvailableMovies(age);
      System.out.print("Welchen Film möchten Sie ausleihen? ");
      int serial = in.nextInt();
      Movie rentedMovie = movieStore.rentMovie(serial);
      if (rentedMovie == null) {
        System.out.println("Film mit der Seriennummer " + serial
            + " konnte nicht ausgeliehen werden.");
      } else {
        System.out.println(rentedMovie + " ausgeliehen.");
      }
    }
  }
}
 
Hast du vielleicht etwas mehr Info's für uns? Was sag denn z.B. Eclipse beim kopilieren?
 
Hab es gerade wie sasdensas beschrieben gemacht und bei mir geht es. Bzw. ich hab die Klassen erst in Eclipse erstellt und dann den Inhalt hier halt rauskopiert.
 
Die FSK.java Klasse ist interessant, sowas hab ich noch nie gesehen. Nett. Muss ich bei Gelegenheit mal ausprobieren.
 
F_GXdx schrieb:
Die FSK.java Klasse ist interessant, sowas hab ich noch nie gesehen.

Enums sind auch nur Klassen in Java, wenn auch ganz spezielle. Aber du kannst dort trotzdem alles mögliche wie Konstruktoren und Methoden einbauen:

Code:
enum Month
{
  JAN(31), FEB(28)
  {
    int getDays( int y )
    {
      return y % 4 == 0 ? 29: 28;
    }
  },
  MAR(31), APR(30), MAY(31), JUN(30),
  JUL(31), AUG(31), SEP(30), OCT(31), NOV(30), DEC(31);

  private int days;

  Month( int days )
  {
    this.days = days;
  }

  int getDays()
  {
    return days;
  }

  int getDays( int year )
  {
    return days;
  }
}


Der Java-Compiler macht da auch wieder ganz normalen Klassen-Code draus.
 
Und wie kompilierst du die Klassen ohne JDK?
 
Mit Willenskraft ;-)
 
Nein, er meint sicherlich den seit Ewigkeiten im Eclipse JDT Core enthaltenen Java Compiler (ECJ), der für die gegebene Situation sicherlich völlig ausreichend ist und einwandfrei läuft. Der ist beim Entwickeln außerdem praktisch, weil er inkrementell funktioniert und bei Bedarf auch fehlerhaften Code kompiliert, um Teilbereiche testen zu können. Laufen tut der sowieso, denn so kommt Eclipse an die Infos, wo eine markierte Variable benutzt wird etc..

Es funktioniert bei Eclipse also in der Tat ohne JDK, auch wenn man beim Kompilieren für den Produktiveinsatz dann doch das JDK nehmen sollte.
 
Zuletzt bearbeitet:
Hab das nun heruntergeladen und installiert! Läuft auch soweit nur wenn ich einen Film ausleihen will, bekomm ich diesen Fehler.

fehlereqohm.jpg
 
Zuletzt bearbeitet:
Schaltnetze schrieb:
Im Produktiveinsatz sollte man immer automatisiert bauen lassen z.b. ivy,ant,maven

Deswegen brauchst du trotzdem den Compiler aus dem Oracle JDK oder dem OpenJDK. Ich sagte nur, dass der ECJ für den Produktiveinsatz weniger gut geeignet ist, völlig egal mit was gebaut wird.
 
Zuletzt bearbeitet:
Zurück
Oben