Pakete und Wiederverwendung

thor_norsk

Bekanntes Mitglied
Guten Tag, irgendwie kann ich die Aufgabe nicht lösen.
Aufgabestellung: Erstellen Sie eine wiederverwendbare Klasse Rechnungen mit Klassenmethoden in einem Paket javaauf4 .
Die erste Methode quadrat() der Klasse soll das Quadrat einer übergebenen Zahl berechnen und die zweite Methode wurzel() die Quadratwurzel einer
übergebenen Zahl.
Für das Berechnen der Quadratwurzel können Sie die Methode sqrt() aus der Klasse Math verwenden.
Die Methode erwartet einen double - Typ als Argument und liefert einen double - Typ zurück. Eine Import - Anweisung ist für die Klasse nicht erforderlich, da die zum
Paket java.lang gehört.
Erstellen Sie von der Methode quadrat() jeweils eine Version, die int - Typen verarbeitet und einen int - Typ zurück liefert, und eine Version, die double - Typen verarbeitet und einen double - Typ zurückliefert. Der Aufruf soll aber nur durch den Namen quadrat() erfolgen. Welcher Typ verarbeitet werden soll, muss die Funktion selbst anhand des Arguments feststellen können.
Erstellen Sie dann eine Klasse in einem Projekt in einem anderen Arbeitsbereich, die in einer main() - Methode die Klassenmethoden aus der Klasse Rechnungen
jeweils mit einem int- und einem double - Wert aufruft. Nehmen Sie die Klasse Rechnungen dabei über einen Verweis in das Projekt mit der Testklasse auf.

Lösungsansatz:

[CODE lang="java" title="Pakete und Wiederverwendung"]package javaauf4;
import java.lang.Math; // laut Aufgabestellung nicht erforderlich ???

public class Rechnungen {


int quadrat(int eingabe) {

int ergebnis = eingabe * eingabe;
return ergebnis;
}

double quadrat(double eingabe) {

double ergebnis = eingabe * eingabe;
return ergebnis;
}

double wurzel(double eingabe) {

double ergebnis = Math.sqrt(eingabe);
return ergebnis;
}
} [/CODE]

Und als nächstes habe ich die Klasse Rechnungen importiert.

[CODE lang="java" title="Pakete und Wiederverwendung"]package javaauf4;
import javaauf4.Rechnungen;

public class TestAuf4 {

public static void main(String[] args) {

System.out.println(quadrat(10));

}
}[/CODE]

Fehlermeldung: Es wird angezeigt, dass die Methode quadrat(10) nicht für den Typ TestAuf4 nicht definiert ist, trotz Import vom javaauf4.Rechnung ???
Ich habe erst Mal mit quadrat(10) versuch gestartet, um zu testen, ob Fehlermeldungen auftauchen.
 

Robert Zenz

Top Contributor
Es wird angezeigt, dass die Methode quadrat(10) nicht für den Typ TestAuf4 nicht definiert ist, trotz Import vom javaauf4.Rechnung ???
Na woher soll denn der Compiler wissen dass du die Methode von der Klasse "Rechnungen" meinst, du musst das schon hinschreiben. Ohne Qualifizierer wird immer die aktuelle Klasse angenommen.

Java:
import AnotherClass;

public class Example {
    public void doSomething() {
        action();
        this.action(); // Beide sind aequivalent, aktuelle Klasse (Example).
        
        AnotherClass.action(); // Aufruf auf der anderen Klasse (statisch).
        new AnotherClass().action(); // Aufruf auf der anderen Klasse (instanz).
    }
}
 

Robert Zenz

Top Contributor
Der Vollstaendigkeit halber, es gibt die Moeglichkeit von "Wildcard-Imports", wo die Methoden automatisch in den aktuellen Scope gezogen werden. Zum Beispiel:

Java:
import AnotherClass.*;

public class Example {
    public void doSomething() {
        action(); // Aufruf direkt der Methode "AnotherClass.action()" wenn diese in der aktuellen Klasse nicht existiert.
    }
}

Aber mach' das bitte nie! Wildcard-Imports sind (zusammen mit package-private) der Teufel!
 

Jw456

Top Contributor
In der Klasse „TestAuf4“ in der „main“ Methode musst du erstmal ein Objekt der Klasse „Rechnungen“ erstellen.
Und auf diesem Objekt oder mit dieser Instanz kannst du auf deine Methoden zugreifen.

Willst du direkt zugreifen müssten die Methoden „static“ sein.
 

thor_norsk

Bekanntes Mitglied
Da in der Aufgabestellung, wenn ich richtig verstanden haben von statische Methoden die Rede ist, habe ich die Aufgabe so gelöst:
( zusätzlich Methoden auf statisch gesetzt)

[CODE lang="java" title="Pakete und Wiederverwendung"]package javaauf4;
import javaauf4.Rechnungen.*;

public class TestAuf4 {

public static void main(String[] args) {

System.out.println("-----------------------------------------------------");

System.out.println("Quadrat Ihre Eingabe lautet:"+Rechnungen.quadrat(10)+"\t\t\t-----");

System.out.println("Quadrat Ihre Eingabe lautet:"+Rechnungen.quadrat(20.5)+"\t\t-----");

System.out.println("Wurzel Ihre Eingabe lautet:"+ Rechnungen.wurzel(9)+"\t\t\t-----");

System.out.println("Wurzel Ihre Eingabe lautet:"+Rechnungen.wurzel(245.555)+"\t-----");

System.out.println("-----------------------------------------------------");
}
}
[/CODE]
 

thor_norsk

Bekanntes Mitglied
Zuerst möchte ich mich bedanken. Ich habe die Methoden in der Klasse Rechnungen auf static gesetzt und in der main() z.B. Rechnungen,quadrat(10) aufgerufen. So funktioniert einwandfrei. Jetzt versuche ich einfach die Aufgabe mit Instanzen zu lösen.
 

thor_norsk

Bekanntes Mitglied
Jetzt der 2 Versuch mit Instanzen.

[CODE lang="java" title="Pakete und Wiederverwendung"]package javaauf41;

public class Rechnungen1 {

int quadrat(int eingabe) {

int ergebnis = eingabe * eingabe;
return ergebnis;
}

double quadrat(double eingabe) {

double ergebnis = eingabe * eingabe;
return ergebnis;
}

double wurzel(double eingabe) {

double ergebnis = Math.sqrt(eingabe);
return ergebnis;
}

public void ausgeben() {

System.out.println("Quadrat Ihre Eingabe lautet:"+quadrat(10));
System.out.println("Quadrat Ihre Eingabe lautet:"+quadrat(10.2));
System.out.println("Quadratwurzel Ihre Eingabe lautet:"+wurzel(16.5));
}
}
[/CODE]

Und natürlich main()

[CODE lang="java" title="Pakete und Wiederverwendung"]package javaauf41;
import javaauf41.Rechnungen1.*;

public class TestAuf41 {

public static void main(String[] args) {

Rechnungen1 berechnung1 = new Rechnungen1();
berechnung1.ausgeben();
}
}[/CODE]
 
Hallo zusammen, habe mir jetzt an der selben Aufgabe sicherlich einen Tag die Zähne ausgebissen, nun habe ich es allerdings geschafft, habe es mit dem Import einfach nicht hinbekommen, weil ich beim erstellen eines neuen Projekts immer "Projektordner als Stammverzeichnis für Quellen und Klassendateien verwenden" angeklickt habe, dadurch wurde der Ausgabeordner ständig geändert und meine Main war wie eine untergeordnete Klasse, die sich nicht ausführen lies. Ich vermute, es wurde einfach überschrieben, vom Hierachieverhältnis? Korregiert mich gerne, wenn ich falsch liege. Vielen Dank an alle Beteiligten.

Meine Lösung schaut wie folgt aus:

Java:
/*Zuerst lege ich ein neues Projekt für die Quadratenaufgabe an, markiere
"Projektordner als Stammverzeichnis für Quellen und Klassendateien verwenden"
erstelle & benenne das package javaauf4, lege eine neue Klasse mit Rechnungen an.
Danach schreibe ich den nötigen Quelltext auf, */

//bis jetzt noch im package javaauf4
package javaauf4;

//Klasse Rechnungen mit Klassenmethoden initialisieren
public class Rechnungen {
    // wurzel berechnung & ruecklieferung
    public static double wurzel(double zahl) {
        return Math.sqrt(zahl);
    }

    // int verarbeitung & ruecklieferung
    public static int quadrat(int zahl) {
        zahl = zahl * zahl;
        return zahl;
    }

    // double verarbeitung & ruecklieferung
    public static double quadrat(double zahl) {
        zahl = zahl * zahl;
        return zahl;
    }

}

/*
in meinem Standart Arbeitsbereich von Eclipse.
Im Anschluss wechsle ich den Arbeitsbereich von Eclipse, auf den Strandart Workspace,
nun startet sich Eclipse neu, in einer sichtlich anderen Umgebung,
also lege ich dort wieder ein neues Projekt, ein neues Package,
eine neue Klasse mit der Main an, wie es der Standart vorschlägt.
Dort findet dann meine Ausgabe statt.*/


package Pruefungspaket;

import javaauf4.Rechnungen;

public class Main {
    

    public static void main(String[] args) {
        
        System.out.println("Das Quadrat ihrer Eingabe lautet:"+ Rechnungen.quadrat(5) +"");

        System.out.println("Das Quadrat ihrer Eingabe lautet:"+ Rechnungen.quadrat(5.5) +"");

        System.out.println("Die Wurzel ihrer Eingabe lautet:"+ Rechnungen.wurzel(5) +"");

        System.out.println("Die Wurzel ihrer Eingabe lautet:"+ Rechnungen.wurzel(5.5) +"");

    }

}
/*
Danach verlinke ich beim jetzigen Projekt des neu angelegten Arbeitsbereichs
den Projektordner von javaaufgabe4, von dem  wir uns die Klasse "Rechnungen" beziehen wollen.
Das funktioniert mit Rechtsklick auf das Projekt / Erstellungspfad / Quelle verlinken.
Nun ploppt ein neuer Ordner mit der benötigten Klasse Rechnungen auf,
auf der wir nun unsere Main mit "import javaauf4.Rechnungen;"
in der Klasse Main verlinken können.

Der Compiler wirft heraus:

Das Quadrat ihrer Eingabe lautet:25
Das Quadrat ihrer Eingabe lautet:30.25
Die Wurzel ihrer Eingabe lautet:2.23606797749979
Die Wurzel ihrer Eingabe lautet:2.345207879911715

Daher gehe ich davon aus, das alles richtig gemacht wurde. */
 

Neue Themen


Oben