Methoden Problem mit get-methode im Quelltext

hans1

Mitglied
Hallo,
ich habe ein Problem, bei einer Aufgabe, die ich für die Uni machen muss.
Es geht um eine Java-Programmierung mit BlueJ.
Denn Quelltext habe ich auch soweit fertig, dachte ich zumindest, jedoch haut da wohl irgendwas mit
meiner get-Methode(Zeile 60) nicht so richtig hin.
Hier der Quelltext:

Java:
package Baustelle.physical;
import java.util.Random;

/**
*Beschreiben Sie hier die Klasse Kran1.
*
*@author 
*@version 003
 */
public class Kran1 extends Kran
{
//Instanzvariablen ---ersetzen Sie das folgende Beispiel mit Ihren Variablen
//private   int a;
//private int b;
/**
*Konstruktor für einen Kran 1
*/public Kran1(double a, double b, double fussbreite, double auslegerLaenge)
{
//Instanzvariable initialisieren;
a=200;
b=100;
fussbreite=50;
auslegerLaenge=250;
/**this.a=a;
this.b=b;
this.baseBreite=fussbreite;
this.ausLegerlaenge=auslegerLaenge;*/
}
Fahrzeug[]LKW1 =new Fahrzeug[100];
/**
Methode zur Erstellung eines Arrays mit LKW
 */

public void constructionVehicleAnimation(int anzLKW){

// Erzeugt "anzLKW" LKW1
for(int x=0; x<anzLKW;x++){
Random r= new Random();
int lkwa=r.nextInt(Bauplatz.getBreite());
//Erzeugt zufällig a-Koordinate für LKW
int lkwb=r.nextInt(Bauplatz.getHoehe());
//erzeugt zufällige  b-Koordinate für LKW
LKW1[x] =new LKW(lkwa,lkwb,0);
LKW1[x].setVisible(true);

}//end for
}
/**
*Rechenmethode
*/

public void LKWunterKran()
{
//Nimmt die Anzahl der  im Kranbereich stehenden LKW auf
int anz=0;

//kontrolliert, wieviele LKW im Kranbereich sind und gibt deren Anzahl an „anz“ weiter
for (int x=0; x< LKW1.length; x++)
{
if ((LKW1[x].getA()-Kran.getA())*(LKW1[x].getA()-Kran.getA())+(LKW1[x].getB()-Kran.getB())*(LKW1[x].getB()-Kran.getB)<=auslgerlaenge*auslegerlaenge)
anz++;
}//end for
System.out.println("es sind "+anz+" LKW im Bereich des Kranauslegers!");
 }
}
Ich weiß beim besten Willen nicht, was da nicht stimmt, im Grunde bezieht sich die get-methode doch auf meine a-Variable(Zeile 20), bzw. die b-Variable(21) und müsste somit ja korrekt sein.
Oder muss ich a und b nochmals initialisieren?
Ich bin leider ein absoluter Versager, was Java angeht und hoffe, dass mir jemand helfen kann.
Schonmal Danke im Vorraus.

PS: ich hoffe, dass die Formatierung von diesem Eintrag einigermaßen hinhaut, habe leider auch nicht soviel Plan davon, wie die aussehen müsste.
 

Blindxantos

Aktives Mitglied
Java:
public Kran1(double a, double b, double fussbreite, double auslegerLaenge)
{
//Instanzvariable initialisieren;
a=200;
b=100;
fussbreite=50;
auslegerLaenge=250;
/**this.a=a;
this.b=b;
this.baseBreite=fussbreite;
this.ausLegerlaenge=auslegerLaenge;*/
}

Hi.
Die Variablen a und b sind nur im Konstruktor gültig, also recht sinnfrei ;)
Du musst die Variablen in der ganzen Klasse zugänglich machen, also außerhalb des Konstruktors deklarieren.
Liebe Grüße

Edit:
Java:
if ((LKW1[x].getA()-Kran.getA())*(LKW1[x].getA()-Kran.getA())+(LKW1[x].getB()-Kran.getB())*(LKW1[x].getB()-Kran.getB)<=auslgerlaenge*auslegerlaenge)
Da ist auch noch ein Tippfehler in Zeile 60 ;)
auslgerlaenge*auslegerlaenge
 
Zuletzt bearbeitet:

hans1

Mitglied
Danke für die Antwort.
Wenn ich dich richtig verstanden habe, dann kann ich im Grunde alles so lassen und muss nur noch irgendwo mein a und b nochmals deklarieren; könnte ich also z.B. auch einfach in Zeile 59 deklarieren, so wie ichs beim Konstruktor gemacht habe?
Also das einfach so machen?:
Java:
//kontrolliert, wieviele LKW im Kranbereich sind und gibt deren Anzahl an „anz“ weiter
for (int x=0; x< LKW1.length; x++)
{
 {
double a=200, b=100;
 }
if ((LKW1[x].getA()-Kran.getA())*(LKW1[x].getA()-Kran.getA())+(LKW1[x].getB()-Kran.getB())*(LKW1[x].getB()-Kran.getB)<=auslgerlaenge*auslegerlaenge)
anz++;
}//end for
System.out.println("es sind "+anz+" LKW im Bereich des Kranauslegers!");
 }
}

Weil iregendwie immer noch der gleiche Fehler kommt, also: "cannot find symbol - method getA();..."
obwohl die Variablen mehr oder weniger direkt davor deklariert sind...
...irgendwie stehe ich wohl ziemlich auf dem Schlauch...
 

Blindxantos

Aktives Mitglied
In deinem Codebeispiel in zeile 13 und 14, das darfst du nicht auskommentieren, sondern muss da sein. basebreite (fussbreite) und auslegerLaenge muss auch deklariert sein

Java:
public class Kran1 extends Kran
{
//Instanzvariablen ---ersetzen Sie das folgende Beispiel mit Ihren Variablen
private double a; //darf kein int sein, weil der Konstruktor einen doublewert erwartet
private double b; //oder du änderst im konstruktor von double auf int, je nach dem ob es nur ganzzahl-koordinaten oder auch 65.3 als koordinate geben soll
private double baseBreite, ausLegerlaenge;
/**
*Konstruktor für einen Kran 1
*/public Kran1(double a, double b, double fussbreite, double auslegerLaenge)
{
//Instanzvariable initialisieren;
/*a=200;
b=100;
fussbreite=50;
auslegerLaenge=250;*/
this.a=a;
this.b=b;
this.baseBreite=fussbreite; //sehr ungünstig, sorgt evtl. für probleme weil der parameter zwar fussbreite, das attribut aber basebreite heist. versuche sowas zu vermeiden
this.ausLegerlaenge=auslegerLaenge;
}

um deinem Kran dann die attribute zuzuweisen (weil das ja jetzt auskommentiert ist), musst du das beim erzeugen des Objektes übergeben.

Kran1 kranbeispiel = new Kran1(200, 100, 50, 250);

Dir fehlt außerdem eine Referenz auf die Klasse LKW, kann das sein?
Ich muss zugeben, ich hab keine ahnung von dem BlueJ, aber in "normalen" programmen brauchst du eine Referenz.

Und die getter und setter sind auch nirgends generiert, ist die klasse die du im ersten beitrag gepostet hast vollständig oder ist das nur ein ausschnitt?


EDIT: Oh, lass mich überlegen. getter und setter werden vererbt? genauso wie die attribute? zeig mal deine klasse Kran :rtfm:
 
Zuletzt bearbeitet:

hans1

Mitglied
Der quelltext, den ich am anfang gepostet habe, ist vollständig, also ist das zumindest alles, was ich habe.

müsste eigentlich auch größtenteils so stimmen wie es ist...wie gesagt, aber so viel Ahnung habe ich da auch nicht
 

Blindxantos

Aktives Mitglied
Und du hast keine Klasse Kran oder LKW oder Fahrzeug? ("Kran.java" bzw. "LKW.java"..)

Kannst du mal die komplette Aufgabenstellung schreiben?
 

hans1

Mitglied
die Aufgabenstellung ist wie folgt:

"Schreiben Sie ein Java-Programm, welches es ermöglicht, eine bestimmte, parameterabhängige Anzahl von Fahrzeugen auf dem Bildschirm zufällig zu positionieren. Anschließend soll die Anzahl der Fahrzeuge, die sich im Bereich des Kranauslegers befinden, ausgegeben werden.

Zur Lösung der Aufgabenstellung sind mindestens folgende Teillösungen umzusetzen
(1)
Erstellen Sie, basierend auf der Klasse Kran aus dem Package „Baustelle“ (Stichwort: Vererbung), eine eigene Kranklasse. Diese soll die Möglichkeit (Methode) anbieten zu ermitteln, ob sich ein Fahrzeug im Radius des Kranauslegers befindet oder nicht.
(2)
Erstellen Sie eine Methode, mit der eine beliebige, parameterabhängige Anzahl von Fahrzeugen auf dem Bildschirm positioniert und angezeigt werden kann.
(3)
Geben Sie die Anzahl der Fahrzeuge, unter Nutzung der o.g. Methoden, aus, die sich im Radius des Kranauslegers befinden.
Hinweise:
Ein Blick in die Klassen Random (java.util.Random) und Math (java.lang.Math) liefert einen guten Ausgangspunkt hinsichtlich der Problematik „Zufall“."

das ist die Aufgabenstellung...

es gibt schon eine Überklasse(sofern man das so nennt) Kran, von dieser erbt mein Kran ja...aber der Quellcode für die Klasse ist ziemlich lang
 
Zuletzt bearbeitet:

Blindxantos

Aktives Mitglied
alles klar, jetzt versteh ich's. Du musst nur teile programmieren ;)


Da du natürlich nur einen Teil hast, kann das mit dem Compilieren natürlich nicht klappen.
LKW1[x].getA() kann nicht funktionieren, weil die Methode nirgends implementiert ist.

D.h. du gehst einfach davon aus, das die attribute in der Klasse Kran sind sowie die getter und setter. Und aufgrund der Vererbung sind die auch in der Klasse Kran1.

Java:
package Baustelle.physical;
import java.util.Random;
 
/**
*Beschreiben Sie hier die Klasse Kran1.
*
*@author 
*@version 003
 */
public class Kran1 extends Kran
{
/**
*Konstruktor für einen Kran 1
*/public Kran1(double a, double b, double fussbreite, double auslegerLaenge)
{
this.a=a;
this.b=b;
this.baseBreite=fussbreite;
this.ausLegerlaenge=auslegerLaenge;
}


Fahrzeug[]LKW1 =new Fahrzeug[100];  //LKW1 ist nicht so gut, in der Aufgabenstellung steht nur was von Fahrzeugen, aber ist in dem fall jetzt auch egal.
/**
Methode zur Erstellung eines Arrays mit LKW
 */
 
public void constructionVehicleAnimation(int anzLKW){
 
// Erzeugt "anzLKW" LKW1
for(int x=0; x<anzLKW;x++){
Random r= new Random();
int lkwa=r.nextInt(Bauplatz.getBreite());
//Erzeugt zufällig a-Koordinate für LKW
int lkwb=r.nextInt(Bauplatz.getHoehe());
//erzeugt zufällige  b-Koordinate für LKW
LKW1[x] =new LKW(lkwa,lkwb,0);  //für was ist die null? was soll das für ein parameter sein?
LKW1[x].setVisible(true); //setVisible brauchst du nicht, für mich sieht das nicht nach einer Visual Class aus sondern ehr nach einem Konsolenprogramm
 
}//end for
}
/**
*Rechenmethode
*/
 
public void LKWunterKran()
{
//Nimmt die Anzahl der  im Kranbereich stehenden LKW auf
int anz=0;
 
//kontrolliert, wieviele LKW im Kranbereich sind und gibt deren Anzahl an „anz“ weiter
for (int x=0; x< LKW1.length; x++)
{
if ((LKW1[x].getA()-Kran.getA())*(LKW1[x].getA()-Kran.getA())+(LKW1[x].getB()-Kran.getB())*(LKW1[x].getB()-Kran.getB)<=auslegerlaenge*auslegerlaenge)
anz++;
}//end for
System.out.println("es sind "+anz+" LKW im Bereich des Kranauslegers!");
 }
}

Ob deine Methode LKWunterKran() tatsächlich die richtige anzahl ausgibt, weiß ich nicht. ich verstehe deine gedankengänge bei der methode nicht, um genau zu sein, deine if-bedingung.

Und noch zwei kleine schönheitsfehler. Das maximum an fahrzeugen ist 100. wenn jemand aber 120 fahrzeuge erzeugen lassen will, gibts nen crash ;)
und der andere fehler ist, das du zwar 3 fahrzeuge erstellen lassen möchtest mit der methode, aber es werden 4 erstellt.
Java:
for(int x=0; x<anzLKW;x++)
es liegt daran, das x = 0 statt x=1.
 
Zuletzt bearbeitet:

hans1

Mitglied
aber im Grunde müsste es so doch einigermaßen stimmen oder?
Und wenn ich a und b nochmal außerhalb der Kranklasse deklariere(so wie ichs vorhin vorgeschlagen habe, eben nur ohne die geschweiften Klammern) müsste das mit getA ja zumindest theoretisch funktionieren.
Der Rest müsste eigentlich ausreichen, dass mit dem getA war eigentlich das einzige Problem, welches bemängelt wurde.

die 0 in Zeile 37 gibt den Winkel an, welchen der Lkw zur Achse hat

LKW(double*x, double*y, double*winkel) ********-**Konstruktor für LKW
 
Zuletzt bearbeitet:

Blindxantos

Aktives Mitglied
ja das müsste soweit einigermasen stimmen. wenn du a und b außerhalb der klasse deklarierst, gibts probleme, aber du meintest warscheinlich außerhalb des konstruktors, aber innerhalb der klasse ;)

im konstruktor drinnen musst du dann aber das int bzw double wegmachen bzw weglassen, sonst wäre das innerhalb des konstruktors ein lokales attribut (also nur innerhalb der methode gültig, sonst nirgends), und lokal gilt vor global.

also sprich:
Java:
double a, b;
public Kran1(double a, double b, double fussbreite, double auslegerLaenge)
{
a=200;
b=100;
fussbreite=50;
auslegerLaenge=250;
}


Ich glaube nicht das es dann geht. Schöner Programmcode sieht auch anders aus :D
Dir fehlt die Main, die ganze Klasse Fahrzeug, getter setter und und und.
Ich hab in meinem vorherigen Post die Klasse mal etwas angepasst falls es dir nicht aufgefallen ist. Vielleicht hilft es dir noch ein bisschen.
 

Blindxantos

Aktives Mitglied
Schöner Programmcode sieht auch anders aus
Willst du das ganze so deinem Lehrer abgeben?:autsch:
Wenn ich sowas meinem Lehrer vorlegen würde, ich glaub der reißt mir den Kopf ab und kackt mir in den Hals :D

es gibt schon eine Überklasse(sofern man das so nennt) Kran, von dieser erbt mein Kran ja...aber der Quellcode für die Klasse ist ziemlich lang
wie lang denn? und wenn du Kran hast, hast du bestimmt auch die Klasse Fahrzeug. Zeig die beiden Klassen ruhig mal. Und wie viele Klassen hast du ingesamt?

ich hab mich vorhin ganz kurz in dieses BlueJ eingelesen, klingt echt eklig :D Darf ich mal fragen was für einen Job/Ausbildung du machst, das du da sowas benutzen musst?
 

hans1

Mitglied
ich studiere, aber nicht Informatik, wie man sicher merkt...

naja gut, wenn du den Quellcode für den Kran gerne sehen willst, dann enthalte ich dir ihn nicht vor:

Java:
package Baustelle.physical;
/**
 * 
 */

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import Baustelle.graphical.KranSymbol;
//import KranSymbol;
//import Material;

/**
 * Die Kranklasse stellt die Kräne auf der Baustelle dar.
 * <p>Die Funktionen der Kräne sind
 * <ul>
 * <li> Auslegerdrehen in beide Richtungen
 * <li> Krane bewegen vor und zurück auf einer Schiene
 * <li> Katze bewegen vor und zurück am Ausleger
 * <li> Material entladen
 * <li> Material abladen
 * <li> Kranhaken heben und senken 
 * </ul>
 * <p>Der Kran kann feststehend oder beweglich sein, der Benutzer muss alle benötigten Daten dem Kran geben, z.B:
 * Auslegerlänge,Kranhöhe und die Koordinaten der Kranschiene.
 * @author Ulf Wagner
 * @author Ali Ismail
 *
 */



public class Kran extends Baugeraet {
    private double x0,y0,x1,y1; 
    private String KranCode;
    private double x ,y ;
    private double auslegerwinkel;  
    private double katzeLocation=1;
    private double katzeXLocation;  
    private double katzeYLocation;
    private double drehenGeschwindigkeit;
    private double katzeGeschwindigkeit;
    private double baseGeschwindigkeit;
    private double hakenGeschwindigkeit;
    private double maxTragfaehigkeit;   
    private double minTragfaehigkeit;
    private double aktuellTragfaehigkeit;
    private double aktuellLast;
    private double baseBreite;
    private double baseLocation;
    private double baseBewegenLaenge;
    private double ausLegerlaenge;
    private double kranHohe;
    private double hakenHohe;
    private Runnable runnable;  
    private boolean krandrehen=false;
    private boolean katzebewegt=false;
    private boolean basebewegt=false;
    private boolean hakenbewegt=false;
    protected ArrayList<Material> materialListe = new ArrayList<Material>();    
    
    /**
     * Konstruktor für den Kran
     * @param kranCode  Krancode ?
     */
    public Kran(String kranCode) {
        this.x=0;
         this.y=0;
         this.x0=0;
         this.x1=0;
         this.y0=0;
         this.y1=0;
         this.baseBewegenLaenge=0;
         this.baseLocation=0;
         this.katzeXLocation=0;
         this.katzeYLocation=0;
         this.katzeLocation=0;
         this.baseBreite=3;
         this.ausLegerlaenge=30;
         this.KranCode=kranCode;        
    }
    /**
     *  Konstruktor für den Kran 
     */
    public Kran(){
         this.x=0;
         this.y=0;
         this.x0=0;
         this.x1=0;
         this.y0=0;
         this.y1=0;
         this.baseBewegenLaenge=0;
         this.baseLocation=0;
         this.katzeXLocation=0;
         this.katzeYLocation=0;
         this.katzeLocation=0;
         this.baseBreite=3;
         this.ausLegerlaenge=30;
         this.KranCode="";
    }
    /**
     *   Konstruktor für den Kran 
     * @param x     x-Koordinate für den neuen Kran
     * @param y     y-Koordinate für den neuen Kran
     * @param fussbreite    die Fussbreite
     * @param auslegerLaenge die Auslegerlänge
     *  <p>Ausgangswerte : 
     *  <ul>
     *  <li>(x0,y0)=(x1,y1)=(x,y)
     *  <li>katzeXLocation=x
     *  <li>katzeYLocation=y
     *  <li>katzeLocation=0
     *  <li>drehenGeschwindigkeit=0
     *  <li>katzeGeschwindigkeit=0
     *  <li>baseGeschwindigkeit=0
     *  <li>minTragfaehigkeit=0
     *  <li>maxTragfaehigkeit=0
     *  </ul>
     */
    public Kran(double x,double y,double fussbreite, double auslegerLaenge){
         this.x=x;
         this.y=y;
         this.x0=x;
         this.x1=x;
         this.y0=y;
         this.y1=y;
         this.baseBewegenLaenge=0;
         this.baseLocation=0;
         this.katzeXLocation=x;
         this.katzeYLocation=y;
         this.katzeLocation=0;
         this.baseBreite=fussbreite;
         this.ausLegerlaenge=auslegerLaenge;
         this.KranCode="";
    }
    
    /**
     *  setzt die Sichtbarkeit des Kranes
     */
    public void setVisible(boolean visible) {
        
        if (visible) {
            if (!isVisible()){              
                go = new KranSymbol();
                meldeAn(go);
                benachrichtige();           
                super.setVisible(visible);              
            }
        }
        else {
            if (isVisible()){
                meldeAb(this.go);
                benachrichtige();
                super.setVisible(visible);
            }
        }
    }
    /**
     *  gibt die aktuelle x-Koordinate zurück
     * @return x
     */
    public double getX() {
        return x;
    }

    /**
     * Setzt die x-Koordinate
     * @param x neue x-Koordinate
     */
    public void setX(double x) {
        this.x = x;
        benachrichtige();
    }

    /**
     *   gibt die aktuelle y-Koordinate zurück
     * @return y
     */
    public double getY() {
        return y;
    }

    /**
     *Setzt die y-Koordinate
     * @param y neue y-Koordinate
     */
    public void setY(double y) {
        this.y = y;
        benachrichtige();
    }
    
    /**
     * gibt die aktuelle x-Koordinate des Anfangs der Schiene zurück
     * @return x0
     */
    public double getX0() {
        return x0;
    }

    /**
     * setzt die x-Koordinate des Anfangs der Schiene
     * @param x0 neue x-Koordinate
     */
    public void setX0(double x0) {
        this.x0 = x0;
        benachrichtige();
    }

    /**
     * gibt die aktuelle y-Koordinate des Anfangs der Schiene zurück
     * @return y0
     */
    public double getY0() {
        return y0;
    }

    /**
     * setzt die y-Koordinate des Anfangs der Schiene
     * @param y0 neue y-Koordinate
     */
    public void setY0(double y0) {
        this.y0 = y0;
        benachrichtige();
    }

    /**
     * gibt die aktuelle x-Koordinate des Endes der Schiene zurück
     * @return x1
     */
    public double getX1() {
        return x1;
    }

    /**
     * setzt die x-Koordinate des Endes der Schiene
     * @param x1 neue x-Koordinate
     */
    public void setX1(double x1) {
        this.x1 = x1;
        benachrichtige();
    }

    /**
     * gibt die aktuelle y-Koordinate des Endes der Schiene zurück
     * @return the y1
     */
    public double getY1() {
        return y1;
    }

    /**
     * setzt die y-Koordinate des Endes der Schiene
     * @param y1 neue y-Koordinate
     */
    public void setY1(double y1) {
        this.y1 = y1;
        benachrichtige();
    }
    /**
     * Gibt den Winkel zwischen Kranschiene und x-Achse zurück
     * @return double
     */
    public double getBaseLineWinkel(){
         return this.getDegree(x1-x0,y1-y0);
    }
    /**
     * Gibt den Winkel des Auslegers zurück
     * @return Auslegerwinkel
     */
    public double getAuslegerwinkel() {
        return auslegerwinkel;
    }

    /**
     * Setzt den neuen Auslegerwinkel
     * @param auslegerwinkel neuer Auslegerwinkel
     */
    public void setAuslegerwinkel(double auslegerwinkel) {
        this.auslegerwinkel = auslegerwinkel;
        benachrichtige();
    }

    /**
     * Gibt die Breite des Kranfußes zurück
     * @return Fußbreite
     */
    public double getbaseBreite() {
        return baseBreite;
    }

    /**
     * Setzt die neue Fußbreite
     * @param breite neue Fußbreite
     */
    public void setbaseBreite(double breite) {
        this.baseBreite = breite;
        benachrichtige();
    }

    
     /**
      * Gibt die aktuelle Hakenhöhe zurück
     * @return Hakenhöhe
     */
    public double getHakenHohe() {
        return hakenHohe;
    }
    /**
     * Setzt die neue Hakenhöhe
     * @param hakenHohe neue Hakenhöhe
     */
    public void setHakenHohe(double hakenHohe) {
        this.hakenHohe = hakenHohe;
    }
    /**
     * Gibt die aktuelle Länge des Auslegers zurück
     * @return Auslegerlänge
     */
    public double getAusLegerlaenge() {
        return ausLegerlaenge;
    }


    /**
     * Setzt die neue Auslegerlänge
     * @param ausLegerlaenge neue Auslegerlänge
     */
    public void setAusLegerlaenge(double ausLegerlaenge) {
        this.ausLegerlaenge = ausLegerlaenge;
        benachrichtige();
    }

    /**
     *  Dreht den Kranausleger mit der akteullen Drehgeschwindigkeit
     *  <p>Postive Winkel dreht den Ausleger entgegengesetzt des Uhrzeigers
     * @param winkel  Drehwinkel (Grad)
     * @throws Exception
     */
    public synchronized void drehen(double winkel) throws Exception {
        
            if (this.drehenGeschwindigkeit <= 0)
                throw new Exception ("Fehler beim Drehen des Auslegers : drehenGeschwindigkeit <= 0");         
           
            double  s=(Math.abs(winkel)*Math.PI/180)/this.drehenGeschwindigkeit;
            final double s1 = s*1000;
            final double winkel1=winkel;
            final double zeitFaktor= this.getZeitFaktor();
 
                    krandrehen=true;
                    double fahreZeit=0;
                    double startZeit = System.currentTimeMillis();
                    double lastZeit=startZeit;
                    double deltaS;
                    double auslegerwinkel0=auslegerwinkel;
                    double aktuellezeitFaktor=zeitFaktor;                   
                    while (  s1 > fahreZeit ) { 
                        deltaS = aktuellezeitFaktor*(System.currentTimeMillis() - lastZeit);
                        if (aktuellezeitFaktor != getZeitFaktor()) {
                            aktuellezeitFaktor=getZeitFaktor();
                        }                                            
                         lastZeit=System.currentTimeMillis();
                         fahreZeit=fahreZeit+deltaS;
                         auslegerwinkel=auslegerwinkel+winkel1*(deltaS/(double)s1)  ;                        
                         benachrichtige();              
                    }                               
                    krandrehen=false;
                    auslegerwinkel=auslegerwinkel0+winkel1;
                    katzeXLocation=x+ausLegerlaenge*Math.cos(auslegerwinkel*Math.PI/180)*katzeLocation;
                    katzeYLocation=y+ausLegerlaenge*Math.sin(auslegerwinkel*Math.PI/180)*katzeLocation;     
                    benachrichtige();                   
        }
    
        /**
         *  Diese Methode bewegt den Kran, dreht den Kranausleger und bewegt die Katze gleichzeitig von der akteullen Lage zur (katzeX,katzeY) Koordinate.
         *  <p> Der Kran bewegt sich nur, wenn die neue Lage (katzeX,katzeY) nicht erreichbar vom Ausgangspunkt ist.
         *  <p> Wenn der Kran ohne Last ist, bewegt sich der Kran auf der Schiene bis zu einem Punkt, wo die neue Lage erreichbar ist
         *  <p> Wenn der Kran beladen ist, bewegt sich der Kran nur bis zu einer erreichbaren Stelle
         * @param katzeX    x-Koordinate der neuen Lage
         * @param katzeY    y-Hoordinate der neuen Lage
         * @throws Exception
         */
        public void setKatzeXYLocation(double katzeX ,double katzeY) throws Exception {         
            double neuKatzeLocation;
            double xBase,yBase;
            double newBaseLocation;
            double drehenAngle;
            double abstand;
            double d,xx,yy;         
            double A = katzeX - x0;
            double B = katzeY - y0;
            double C = x1 - x0;
            double D = y1 - y0;
            double dot = A * C + B * D;
            double len_sq = C * C + D * D;
            double param = dot / len_sq;            
            xBase=x;
            yBase=y;
            double kranBaseAngel=getDegree((x1-x0),(y1-y0));    
            if(param < 0)
            {
                xx = x0;
                yy = y0;
            }
            else if(param > 1)
            {
                xx = x1;
                yy = y1;
            }
            else
            {
                xx = x0 + param * C;
                yy = y0 + param * D;
            }
            d=Math.sqrt(Math.pow(xx-katzeX, 2)+Math.pow(yy-katzeY, 2));     

            if (d > this.ausLegerlaenge )
                throw new Exception("ungültiger neuer Ort der Katze");
            if (this.aktuellLast > this.maxTragfaehigkeit)
                throw new Exception("Die aktuellLast > maxTragfaehigkeit");         
            
            neuKatzeLocation=Math.sqrt( Math.pow((katzeY-y), 2)+Math.pow((katzeX-x), 2))/this.ausLegerlaenge;   
            
            double baseOffset=0;
            if ( (neuKatzeLocation > 1  || neuKatzeLocation <= 0 ) && this.aktuellLast > 0) {
                double xr=0;
                if(this.aktuellLast > this.minTragfaehigkeit )
                  {xr=this.ausLegerlaenge*((this.aktuellLast-this.minTragfaehigkeit)/(this.maxTragfaehigkeit-this.minTragfaehigkeit));}
                
                neuKatzeLocation=(this.ausLegerlaenge-xr)/this.ausLegerlaenge;
                
                double Base_katze_dis=Math.sqrt(Math.pow(katzeX-xx,2)+Math.pow(katzeY-yy,2));
                baseOffset=Math.sqrt(Math.pow(this.ausLegerlaenge-xr,2)-Math.pow(Base_katze_dis,2));                
                
                if (x > xx) {
                    xBase=xx+baseOffset*Math.cos(Math.toRadians(kranBaseAngel));
                    yBase=yy+baseOffset*Math.sin(Math.toRadians(kranBaseAngel));    
                }
                else {
                    xBase=xx-baseOffset*Math.cos(Math.toRadians(kranBaseAngel));
                    yBase=yy-baseOffset*Math.sin(Math.toRadians(kranBaseAngel));
                }
                
                newBaseLocation=Math.sqrt(Math.pow(xBase-x0, 2)+Math.pow(yBase-y0, 2))/Math.sqrt(Math.pow(x1-x0, 2)+Math.pow(y1-y0, 2));
                abstand=(newBaseLocation-baseLocation)*Math.sqrt(Math.pow(x1-x0, 2)+Math.pow(y1-y0, 2));
                System.out.println("Kran Umzug :" + abstand);
                this.kranUmzug(abstand);
            }   
            
                    
            
            if ( (neuKatzeLocation > 1  || neuKatzeLocation <= 0 ) ){
                neuKatzeLocation=Math.sqrt( Math.pow((katzeY-yy), 2)+Math.pow((katzeX-xx), 2))/this.ausLegerlaenge;
                if (AktuellTragfaehigkeit(neuKatzeLocation) < this.aktuellLast)
                    throw new Exception ("Die Tragfähigkeit für den neuen Ort der Katze ist geringer als die aktuelle Last ");
                
                newBaseLocation=Math.sqrt(Math.pow(xx-x0, 2)+Math.pow(yy-y0, 2))/Math.sqrt(Math.pow(x1-x0, 2)+Math.pow(y1-y0, 2));
                abstand=(newBaseLocation-baseLocation)*Math.sqrt(Math.pow(x1-x0, 2)+Math.pow(y1-y0, 2));
                this.kranUmzug(abstand);
                xBase=xx;
                yBase=yy;
            }       
            
            if (AktuellTragfaehigkeit(neuKatzeLocation) < this.aktuellLast)
                throw new Exception ("Die Tragfähigkeit für den neuen Ort der Katze ist geringer als die aktuelle Last ");                        

            abstand=(neuKatzeLocation-this.katzeLocation)*this.ausLegerlaenge;
            katzeXLocation=x+ausLegerlaenge*Math.cos(auslegerwinkel*Math.PI/180)*katzeLocation;
            katzeYLocation=y+ausLegerlaenge*Math.sin(auslegerwinkel*Math.PI/180)*katzeLocation;         
            double alpha=getDegree((katzeX-xBase),(katzeY-yBase));          
            drehenAngle=alpha-auslegerwinkel;
            if (alpha-auslegerwinkel > 180)
                drehenAngle=-(360 -(alpha-auslegerwinkel)); 
            
            try {
                this.drehen(drehenAngle);           
                this.katzeUmzug(abstand);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            benachrichtige();
        }

        /**
         *  Bewegt den Kran vor- und zurück auf der Kranschiene
         * @param Abstand
         * @throws Exception
         */
         public void kranUmzug(double abstand) throws Exception{            
             
                baseBewegenLaenge=Math.sqrt( Math.pow((y1-y0), 2)+Math.pow((x1-x0), 2));
                 if (this.baseGeschwindigkeit <= 0 && baseBewegenLaenge > 0 )
                        throw new Exception ("kranUmzug Fehler : baseGeschwindigkeit <= 0");
                final   double  finalKranocation=((baseLocation*baseBewegenLaenge)+abstand)/baseBewegenLaenge ;         
                
                if (baseBewegenLaenge== 0)
                    throw new Exception ("Dieser Kran kann nicht bewegt werden, setzen Sie bitte (x0,y0) (x1,y1) und baseLocation.");
                if (finalKranocation > 1 || finalKranocation <0 )
                    throw new Exception ("ungültiger Kranumzug");
                if (this.baseGeschwindigkeit <= 0)
                    throw new Exception ("Kranumzug Fehler : kranGeschwindigkeit <= 0 ");
                double  s=Math.abs(abstand)/this.baseGeschwindigkeit;
                final double s1 = s*1000;           
                final double abstand1=abstand;
                final double zeitFaktor=this.getZeitFaktor();
   
                        basebewegt=true;
                        double umzugZeit=0;
                        double startZeit = System.currentTimeMillis();
                        double lastZeit=startZeit;
                        double deltaS;
                        double aktuellezeitFaktor=zeitFaktor;
                        while (  s1 > umzugZeit ) {                      
                                deltaS = aktuellezeitFaktor*(System.currentTimeMillis() - lastZeit);
                                lastZeit=System.currentTimeMillis();
                                if (aktuellezeitFaktor != getZeitFaktor()) {
                                    deltaS=getZeitFaktor()/aktuellezeitFaktor;
                                    umzugZeit=umzugZeit*(getZeitFaktor()/aktuellezeitFaktor);
                                    aktuellezeitFaktor=getZeitFaktor();
                                }                           
                             umzugZeit=umzugZeit+deltaS;                                 
                             baseLocation=baseLocation +(abstand1/baseBewegenLaenge)*(deltaS/(double)s1);   
                             if(baseLocation <1 && baseLocation > 0)
                                 setBaseLocation(baseLocation);                         
                        } 
                        baseLocation=finalKranocation ;
                        x=x0+baseLocation*(x1-x0);
                        y=y0+baseLocation*(y1-y0);  
                        benachrichtige();   
                        basebewegt=false;  
         }
    

}

ähnliche gibt es auch noch für Fahrzeug, LKW, Baugeraet, etc.
 

hans1

Mitglied
wie du vielleicht siehst ist der Quellcode für den Kran nicht vollständig, weil man hier nur 25000 Zeichen posten kann und es glaub ich grade 34000 und nochwas Zeichen waren.

Im Grunde, hatte ich den Quellcode auch so schonmal abgegeben und den Auftrag bekommen nachzubessern...was iregendwie wohl auch verständlich ist...aber ich kenne Leute die haben einen ziemlich identischen abgegeben und auch bestanden, deswegen glaube ich, dass ich durchkommen müsste, wenn ich das so verändere wie du vorgeschlagen hast.
 

Blindxantos

Aktives Mitglied
ok, das ist dann doch etwas zu lang um das mal so nebenbei zu lesen :eek:

a und b brauchst du nicht neu deklarieren in kran1, das erbst du von Kran. um genau zu sein erbst du x und y. und dafür gibt es auch getter. ich denke damit kommst du durch, wenn du meinst, das andere auch damit durchgekommen sind
 

hans1

Mitglied
meinst du, dass es schlauer wäre a und b zu x und y zu machen?

also: public Kran1(double x, double y, double fussbreite, double auslegerLaenge)
das dann auch dementsprechend bei den anderen Methoden also dann auch getX, usw.
und dann wäre eine erneute deklaration überflüssig?
 

Blindxantos

Aktives Mitglied
[JAVA=36]private double x ,y ;[/code]
die beiden attribute erbst du aus Kran, also sind die direkt in Kran1 mit drinnen und müssen NICHT neu deklariert werden.
 

hans1

Mitglied
habe grade die Nachricht bekommen, dass ich bestanden habe, wohl mehr schlecht als recht, aber was solls.

Danke noch mal für deine Bemühungen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
E Problem mit static Methode Java Basics - Anfänger-Themen 4
N Methoden printf Methode Problem Java Basics - Anfänger-Themen 2
K Problem mit Methode(Array,Boolean,ForSchleife) Java Basics - Anfänger-Themen 6
V Problem Aufruf einer Methode in einer Methode Java Basics - Anfänger-Themen 1
P TicTacToe Problem mit Win Methode Java Basics - Anfänger-Themen 4
A Problem mit toString Methode Java Basics - Anfänger-Themen 8
P Problem mit dem Auslesen einer Varible/Methode Java Basics - Anfänger-Themen 8
F Problem bei eshop -> Ausführen einer Methode über eine Shopverwaltung Java Basics - Anfänger-Themen 6
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
E Problem beim Übergeben von Parameter an Methode Java Basics - Anfänger-Themen 2
O Methode in andere Klasse verlegt, "auslesen" einer HTML Seite verschnellert - Problem. Java Basics - Anfänger-Themen 4
F problem mit erster methode. Java Basics - Anfänger-Themen 6
M Threads Thread.Sleep Problem im Zusammenhang mit GUI/ActionPerformed-Methode Java Basics - Anfänger-Themen 4
D Problem mit Methode und Timer Java Basics - Anfänger-Themen 35
C Problem mit Zugriff auf Variable bzw. get-Methode in anderer Klasse Java Basics - Anfänger-Themen 2
D Problem mit set-Methode Java Basics - Anfänger-Themen 6
F Problem bei Rückgabe von StringBuffer aus Methode Java Basics - Anfänger-Themen 6
M Problem mit methode?? Java Basics - Anfänger-Themen 6
B Problem bei dem erstellen einer Main Methode Java Basics - Anfänger-Themen 4
M Problem bei Schleife + Methode Java Basics - Anfänger-Themen 2
G Problem mit sleep() Methode Java Basics - Anfänger-Themen 7
O Methode - Problem mit Subtraktion in einer while-Schleife Java Basics - Anfänger-Themen 2
T Problem beim Returnwert einer Methode Java Basics - Anfänger-Themen 12
chik Problem mit der Runnable Methode Java Basics - Anfänger-Themen 3
S Problem mit main Methode Java Basics - Anfänger-Themen 2
V Problem von einbinden der Methode Java Basics - Anfänger-Themen 2
V Problem mit Insert-Methode des Binärbaums Java Basics - Anfänger-Themen 4
J Methode nimmt Liste -> Problem Java Basics - Anfänger-Themen 4
G PRoblem mit rekursiver float additions methode Java Basics - Anfänger-Themen 9
S Problem mit Eclipse: erkennt vorhandene Main-Methode nicht Java Basics - Anfänger-Themen 13
D Problem bei einer Rekursiven Methode Java Basics - Anfänger-Themen 2
K mein() Methode – Argumente auslesen Problem Java Basics - Anfänger-Themen 6
G Problem mit Methode getColumnCount (JTable) Java Basics - Anfänger-Themen 3
M Problem mit Exponential Methode Java Basics - Anfänger-Themen 6
M Problem beim Aufruf einer Methode: Wo is der Fehler? Java Basics - Anfänger-Themen 12
P Problem mit Array in Methode Java Basics - Anfänger-Themen 4
S Problem mit Methode und Eclipse Java Basics - Anfänger-Themen 8
B Problem mit einer static void Methode Java Basics - Anfänger-Themen 8
H Konstruktor in Methode fremder Klasse: try-catch-Problem Java Basics - Anfänger-Themen 4
megachucky Kleines Problem mit dem "return" einer Methode. Java Basics - Anfänger-Themen 11
megachucky Problem mit LinkedList und der get-Methode Java Basics - Anfänger-Themen 2
Paule Problem mit getText()-Methode Java Basics - Anfänger-Themen 12
E Problem mit Methode Math.max Java Basics - Anfänger-Themen 2
D Problem bei Übergabe von Werten an eine Methode Java Basics - Anfänger-Themen 2
V Problem mit der Anzeige einer paint-Methode in einem Panel Java Basics - Anfänger-Themen 2
M Problem mit methode Java Basics - Anfänger-Themen 3
W Problem mit dem Aufruf einer Methode Java Basics - Anfänger-Themen 2
G Problem mit einer Methode Java Basics - Anfänger-Themen 2
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben