Hilfe bei Aufgabe

Status
Nicht offen für weitere Antworten.

Coco

Mitglied
Wer könnte mir helfen! Bin am knobeln und komm grad nicht weiter bei meinem Programm!
Die Aufgabe lautet:

Erstellen sie ein Programm, welches von der Kommandozeile Pegeldaten (Name des Pegels, Pegelstand in cm und gegebenenfalls den Namen des Flusses) einliest und die Daten ausgibt, wobei der Pegelstand in cm angegeben werden soll.
a) Erstellen sie eine öffentliche Klasse Pegel zur Aufnahme von Namen und Pegelstand des Pegels. Die Felder sollen im Konstruktor der Form public Pegel initialisiert und der Pegelstand in cm umgerechnet werden. In der Methode drucke() soll Name und Pegelstand ausgegeben werden.
b) Leiten sie von der Klasse Pegel eine öffentliche Klasse Flusspegel ab, die zusätzlich den Namen des Flusses speichert. Im Konstruktor soll zusätzlich der Name des Flusses initialisiert werden, ebenso soll zur Ausgabe aller Daten die Methode drucke() geeignet überschrieben werden.
c) Schreiben sie eine öffentliche Klasse PegelVerwaltung mit main-Methode, welche in Abhängigkeit der Anzahl der Kommandozeilenparameter eine Instanz von Pegel/Flusspegel erzeugt und die Daten auf dem Bildschirm ausgibt. Testen sie ihr Programm mit den Aufrufen java PegelVerwaltung Kelheim 2.20 und java PegelVerwaltung Passau 4.24 Donau.

Mit a und b bin ich soweit gut zurechtgekommen, nur bei c häng ich. Kann mir jemand einen Tipp geben?????Danke
Code:
public class Pegel {
  public String name;
  public double Pegelstand;

  public Pegel( String name, double Pegelstand ) {
     this.name = name;
     this.Pegelstand = Pegelstand;
  }
public static double Pegelstand (double Pegelstand) {
return Pegelstand * 100;
}

public void drucke() {
 System.out.println("Name: " + name);
 System.out.println("Pegelstand: " + Pegelstand);
}

}
Code:
public class Flusspegel extends Pegel{
  private String Flussname;

public Flusspegel (String name, double Pegelstand, String Flussname){
super(name, Pegelstand);
this.Flussname=Flussname;
}
public void drucke(){
super.drucke();
System.out.println(" (Flusspegel von " + Flussname +")");
}
}

Code:
public class PegelVerwaltung {
	public static void main( String[] args) {
		Pegel[] pegelliste = {  
new Pegel ("Kelheim", 2.20, "Donau"),
new Pegel ("Passau", 4.24, "Donau")
};
for (int i = 0; i < args.length; i++)
System.out.println (args[i]); 
            
			
	}
}

Edit KSG9|plak: Bitte Code-Tags (richtig) benutzen ;)
 

bellmann29

Aktives Mitglied
Hallo, fast richtig.

Hier mal ein Vorschlag. Muß man so nicht machen, kann man aber. Also ich hab es zwar nicht getestet, aber es sollte funktionieren.

Code:
public class PegelVerwaltung{
  public void main(String[] args){
    Pegel pegel = null;
    int i = args.length();
    switch(i){
      case 2:
        pegel = new Pegel(args[0], args[1]);
      break;
      case 3:
        pegel = new FlussPegel(args[0], args[1], args[2]);
      break;
      default:
        System.out.println("Aufruf : java PegelVerwaltung Pegelname Pegelstand <opt> Flussname</opt>");
      }
      
      if(pegel != null){
        System.out.println(pegel.drucke());
      }else{
        System.out.println("Es wurde kein Pegel-Objekt erzeugt");
      }

      System.exit(0);
}

Probier es!
 

mic_checker

Top Contributor
Also a und b müssten soweit eigentlich stimmen, hab code nur überflogen.

Zur Pegelverwaltung:

Du darfst dort nicht den Konstruktor aufrufen:

Code:
		Pegel[] pegelliste = {  new Pegel ("Kelheim", 2.20, "Donau"),
										new Pegel ("Passau", 4.24, "Donau")
									};

Der Compiler schaut in Pegel nach und findet diesen Konstruktor nicht.

Ich denke mal es ist so gedacht das du bei 3 Argumenten den Konstruktor aus Flusspegel aufrufst (mit den jeweiligen Argumenten), falls du nur zwei Argumente hast musst du wohl den entsprechenden Pegel-Konstruktor aufrufen.

Schätze zumindest mal das es so gedacht ist..
 

mic_checker

Top Contributor
arg, das passiert wenn man postet und gleichzeitig chattet. post sollte eigentlich früher fertig sein...

bellmann29 hat das ganze soweit umgesetzt wie ich es ungefähr gedacht hab.

bellmann29 hat gesagt.:
Hallo, fast richtig.

Hier mal ein Vorschlag. Muß man so nicht machen, kann man aber. Also ich hab es zwar nicht getestet, aber es sollte funktionieren.

Code:
public class PegelVerwaltung{
  public void main(String[] args){
    Pegel pegel = null;
    int i = args.length();

Es heisst:

Code:
int i = args.length;

Code:
    switch(i){
      case 2:
        pegel = new Pegel(args[0], args[1]);
Pegel erwartet als zweites Argument double, nicht String

Code:
      break;
      case 3:
        pegel = new FlussPegel(args[0], args[1], args[2]);
Es heisst Flusspegel nicht FlussPegel...außerdem: Flusspegel erwartet ebenfalls als zweites argument ein double.

Code:
      if(pegel != null){
        System.out.println(pegel.drucke());

Das wird nicht funzen -> drucke ist vom Typ void()
 

bellmann29

Aktives Mitglied
@mic

Ja, ja

Du hast ja recht.

@coco

Sorry, Coco war nicht mit Absicht. Aber eine IDE hätte dass sofort angezeigt. Du arbeitest sicher nicht so flüchtig wie ich.
 

mic_checker

Top Contributor
bellmann29 hat gesagt.:
@mic

Ja, ja

Du hast ja recht.

@coco

Sorry, Coco war nicht mit Absicht. Aber eine IDE hätte dass sofort angezeigt. Du arbeitest sicher nicht so flüchtig wie ich.

natürlich =)

Ach, das sind ja noch Fehler die man schnell findet, die aber auch schnell im Eifer des Programmierens passieren können. Der Ansatz bei dem Code ist entscheidend.
 

bellmann29

Aktives Mitglied
Code:
...
if(pegel != null){
  pegel.drucke();
}
...

Für die Konstruktoren:

Code:
...
pegel = new Pegel(arg[0], Double.parseDouble(arg[1]));
...

...
pegel = new Flusspegel(arg[0], Double.parseDouble(arg[1]), arg[2]);
...

@ mic

Besser so?
 

mic_checker

Top Contributor
bellmann29 hat gesagt.:
Code:
...
if(pegel != null){
  pegel.drucke();
}
...
ja

Für die Konstruktoren:

Code:
...
pegel = new Pegel(arg[0], Double.parseDouble(arg[1]));
...

...
pegel = new Flusspegel(arg[0], Double.parseDouble(arg[1]), arg[2]);
...

Wenn du main ein Array übergibst das arg heisst ja...normalerweise heisst es ja args.
Eigentlich müsstest du noch Exceptions abfangen, falls einer z.B. für Pegelstand ausversehen "2,1" anstatt "2.1" eingibt (müsste NumberFormatException sein).

Aber so wird dein Programm noch nicht funktionieren. Der Compiler findet die Signatur der Methode main() nicht. Diese muss korrekterweise lauten:

Code:
public static void main(String[] args)

Alternativ zu deiner switch-lösung hier die gute alte if:

Code:
    	if(args.length == 2)
	   	pegel = new Pegel(args[0], Double.parseDouble(args[1]));
		else if(args.length == 3)
			pegel = new Flusspegel(args[0], Double.parseDouble(args[1]), args[2]);
		else
			System.out.println("Aufruf : java PegelVerwaltung Pegelname Pegelstand <opt> Flussname</opt>");

müsste eigentlich stimmen.

greets
mic_checker
 

mic_checker

Top Contributor
Hi,
kein Problem.

Evtl. wäre es auch sinnvoll noch eine toString() Methode einzufügen, dort könntest du evtl. den Code von drucke() verwenden....
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben