Ticket Aufgabe

Hallo Leute,

es sind mehrere Sachen was ich in der Angabe nicht verstehe. Warum wird aufgefordert dass diese Klasse Instanz name haben soll?
habe ich die Aufgabenstellung richtig implementiert? Was mache ich falsch und warum ist die 2. Ausgabe 0.0?

Schreibe ein Javaprogramm das eine Klasse ticket festlegt. Ein Konstruktor soll die Anzahl der Zonen vom Hauptprogramm übernehmen und überprüfen, ob diese größer als 0 ist. Ist dies nicht der Fall, soll das Programm abgebrochen werden. Die Klasse besteht aus den Merkmalen name und anz(ahl der Zonen).Eine Methode preis() soll den Preis des Tickets berechnen und den Preis zurückgeben. Eine Zone kostet 1,8 €. Eine Methode hinundretour() soll den Preis aus der Methode preis() verdoppeln. Eine Methode ausgabe() soll einen String zurückgeben der Form: Der Preis beträgt … €. Hin und Retour: … €. Eine Methode personen() übernimmt vom Hauptprogramm die Anzahl der Personen und *gibt ein Ticket zurück, wobei die Anzahl der Zonen mit der Anzahl der Personen multipliziert wird. Im Hauptprogramm sollen 2 Instanzen der Klasse ticket gebildet werden und die Fahrkarten ausgegeben werden.
*1. Instanz: normale Karte
*2. Instanz: Karte ist für mehr als eine Person gültig.

für eure Unterstützung wäre ich wirklich sehr dankbar


public class Ticket {

	int zone;
	int name;
	int personen;

	public Ticket(int zone) {
		if (zone <= 0) {
			System.exit(0);
		}
		this.zone = zone;
	}

	public double preis() {

		return zone * 1.8;
	}

	public double hinundretour() {
		return preis() * 2;
	}

	public double personen() {

		return personen * zone;
	}

	public String ausgabe() {
		return "Der Preis betraegt" + preis() + " Euro 
" + " Hin und Retour:"
				+ hinundretour() + "Euro";
	}
}
       import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		int zone;
		String name;
		Scanner sc = new Scanner(System.in);
		zone = sc.nextInt();

		Ticket ticket1 = new Ticket(zone);
		System.out.println(ticket1.preis());

		zone = sc.nextInt();
		int personen = sc.nextInt();
		Ticket ticket2 = new Ticket(zone);
		System.out.println(ticket2.personen());

	}
}
}

Also was mir gleich aufgefallen ist:

  1. Die Klasse ticket soll nur “name” und “anz” (Für Anzahl Zonen) erhalten.
  2. Die Methode personen() soll ein ticket liefern, wobei die Anzahl der Zonen mit der Anzahl der Personen multipliziert wird.
    Du brauchst “Personen” nicht. Wozu “name” gut sein soll, hab ich aber auch noch nicht verstanden…
    “Name” sollte möglicherweise String sein und auch irgendwie im Konstruktor irgendwie initialisiert werden, denk ich…
    Vielleicht sollte da “Einzelticket” oder “Gruppenticket” drin stehen…, k.A…

*** Edit ***

Ich denke auch, dass für die Erzeugung des Gruppentickets, also der 2ten Instanz von Ticket die Methode personen() der ersten Instanz verwendet werden soll…

Danke @pappawinni . jetzt wird zumindest kein 0.0 zurückgeliefert

Habe ich jetzt nach der Angabe gehalten?

public class Ticket {

	int anz;
	int name;
	int anzPersonen;

	public Ticket(int zone) {
		if (zone <= 0) {
			System.exit(0);
		}
		anz = zone;
	}

	public double preis() {

		return anz * 1.8;
	}

	public double hinundretour() {
		return preis() * 2;
	}

	public double personen() {

		return anzPersonen * anz;
	}

	public String ausgabe() {
		return "Der Preis betraegt" + preis() + " Euro 
" + " Hin und Retour:"
				+ hinundretour() + "Euro";
	}

	

}


import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		String name;
		Scanner sc = new Scanner(System.in);
		int zone;

		zone = sc.nextInt();
		Ticket ticket1 = new Ticket(zone);

		System.out.println(ticket1.preis());

		zone = sc.nextInt();
		Ticket ticket2 = new Ticket(zone);

		ticket2.anzPersonen = sc.nextInt();
		System.out.println(ticket2.personen());


	}

}

die Methode Personen() soll ein Ticket, d.h. also wohl eine Instanz von Ticket zurückliefern… denk ich.
Die Zahl der Personen sollte Parameter der Methode sein und kein Feld der Klasse Ticket.

*** Edit ***

import java.util.Scanner;

public class Ticket { 

	int anz; 
	String name; 

	public Ticket(int zone) { 
		this(1,zone);
	} 
	public Ticket(int anzPers, int zone) {
		if (anzPers == 1){
			name = "Ticket für eine Person";
		} else {
			name = String.format("Ticket für %d Personen",anzPers);
		}
		if (zone <= 0) { 
			System.exit(0); 
		} 
		anz = zone; 
	} 	
	public double preis() { 
		return anz * 1.8; 
	} 
	public double hinundretour() { 
		return preis() * 2; 
	} 
	public Ticket personen(int anzPers) { 
		return new Ticket(anzPers,anzPers * anz); 
	} 
	public String ausgabe() { 
		return String.format("%s%nDer Preis betraegt %.2f Euro%nHin und Retour %.2f Euro%n",
				 name, preis(), hinundretour());
	} 
	public static void main(String[] args) { 
		Scanner sc = new Scanner(System.in); 

		System.out.println("Anzahl Zonen eingeben");
		int zone = sc.nextInt(); 
		Ticket ticket1 = new Ticket(zone); 
		System.out.println(ticket1.ausgabe());

		System.out.println("Anzahl Personen eingeben");
		int anzPers = sc.nextInt(); 
		Ticket ticket2 = ticket1.personen(anzPers);
		System.out.println(ticket2.ausgabe());

		sc.close();
	}
}

Mal am Rande:[quote=pappawinni]System.exit(0);[/quote]ist ganz böse: es beended nicht nur das aktuelle Code-Stück sondern gleich die ganze JVM, und das auch noch so, dass der Aufrufer denkt alles wäre IO. Sollte Euer Lehrer das wirklich gemeint haben?

Allgemein sollte man damit so umgehen:
System.exit(); wird ausschließlich direkt in der main-Methode (und nirgens sonst) und dort in einem(bzw. allen)catch-Block(s) verwendet. Die Zahl sollte von 0 verschieden sein: 1 wenn es ein Anwender-Fehler war (zB.: falsche Parameter) nachdem die Onlinehilfe ausgegeben wurde und 2 wenn es zu einem sonstigen Fehler kam.

Um die Abarbeitung in anderen Teilen des Programms (hier also im Konstruktor) zu unterbrechen wirft man eine (Runtime-)Exception mit aussagekräftiger Fehlermeldung:throw new RuntimeException("Ticket muss für mindestens eine Zone gelten.");

bye
TT

ok, schön, soweit war ich im Grunde noch garnicht. Es ging ja erst einmal noch um das Aufgabenverständnis…

danke. Ihr habt mir wirklich gut geholfen

[quote=pappawinni_;89245]soweit war ich im Grunde noch garnicht.[/quote]Schon OK, aber das ist eben etwas, das man sich gar nicht erst angewöhnen sollte…

bye
TT

ja mei… dumm gelaufen, hab halt den Code einfach erst mal kopiert ein bisschen rumgefummelt… obwohl ich eigentlich schon halb im Bett war…

[quote=pappawinni]ja mei… dumm gelaufen[/quote]hey, der Kommentar war mehr für den TO als für Dich, also entspann Dich bitte.

bye
TT