Erste Schritte Zweites Objekt an Stelle von erstem Objekt setzen

ClaireFraser

Mitglied
Hallo ihr Lieben,

Ich habe kürzlich mit Java angefangen und stehe also noch ganz am Anfang. Es macht mir aber Spaß rumzutüfteln und zu probieren, leider gehen mir meine (begrenzten) Ideen aus. Wir haben nach und nach eine vorgegebene Anwendung verändert, aber jetzt stecke ich fest. Es geht um 2 Käfer, die durch ihre Welt laufen und Hindernissen ausweichen. Soweit so gut. Jedoch soll nun der erste Käfer (kaefer) auf eine beliebige Position laufen (das bekomme ich noch hin ;)) und der zweite Käfer (kaefer2) soll dann mithilfe eines Algorithmus an die gleiche Stelle laufen, an der auch der erste Käfer steht. Ich muss also erst die Koordinaten des ersten Käfers ermitteln um dann den zweiten loszuschicken. Und das ist nun auch mein Problem.

So sieht das im Moment bei mir aus:


Java:
import kaeferwelt.gui.KaeferFenster;
import kaeferwelt.gui.KaeferWelt;
import kaeferwelt.kaefer.Kaefer;


public class Uebung11
{

    public static void main(String argumente[])
    {
        KaeferFenster fenster = new KaeferFenster();
        KaeferWelt welt = fenster.getWelt();
        Kaefer kaefer = new Kaefer(welt);
        Kaefer kaefer2 = new Kaefer(welt);


        // Bewegungen
        for (int i=0; i<=20; i++)
        { 
            kaefer.vor();            
            if( kaefer.vorBaum() ) //true
            {
                kaefer.rechts();
                kaefer.vor();
                kaefer.links();
                kaefer.vor();
                kaefer.vor();
                kaefer.links();
                kaefer.vor();
                kaefer.rechts();
            }
            if( kaefer.vorPilz() ) //true
            {
                kaefer.rechts();
                kaefer.vor();
                kaefer.links();
                kaefer.vor();
                kaefer.vor();
                kaefer.links();
                kaefer.vor();
                kaefer.rechts();
            }
            System.out.println(kaefer.getX() + " " + kaefer.getY());
            
            int z1 = Integer.parseInt(null, kaefer.getX());
            int z2 = Integer.parseInt(null, kaefer.getY());
            
        }
        
        
        
        for (int i="kaefer.getX" +" "+ "kaefer.getY")
        { 
            kaefer2.vor();
            if( kaefer2.vorBaum() ) //true
            {
                kaefer2.rechts();
                kaefer2.vor();
                kaefer2.links();
                kaefer2.vor();
                kaefer2.vor();
                kaefer2.links();
                kaefer2.vor();
                kaefer2.rechts();
            }
            if( kaefer2.vorPilz() ) //true
            {
                kaefer2.rechts();
                kaefer2.vor();
                kaefer2.links();
                kaefer2.vor();
                kaefer2.vor();
                kaefer2.links();
                kaefer2.vor();
                kaefer2.rechts();
            }
        }        
    }

Es geht eben um diesen Teil:

Java:
            System.out.println(kaefer.getX() + " " + kaefer.getY());
            
            int z1 = Integer.parseInt(null, kaefer.getX());
            int z2 = Integer.parseInt(null, kaefer.getY());
            
        }
        
        
        
        for (int i="kaefer.getX" +" "+ "kaefer.getY")

Der so natürlich nicht funktioniert... aber ich hab einfach keine schlauen Ideen mehr. ;( Vielleicht fällt ja jemandem von euch was Schlaues ein?! Vielen Dank schon mal im Voraus!

(Und schreibt bitte langsam, damit ich es langsam lesen und verstehen kann :oops:)
 
Zuletzt bearbeitet von einem Moderator:

Saheeda

Top Contributor
Was soll die Schleife denn bewirken?

Vielleicht sowas?

Java:
for(int i = kaefer.getX(); i< kaefer.getY(); i++){


}

Du kannst übrigens die ifs noch jeweils zusammenfassen. Wenn ich mich jetzt nich verguckt habe, ist in vorBaum und vorPilz dasselbe drin:

Java:
if(kaefer.vorBaum() || kaefer.vorPilz()){

}

Die Pipes (||) sind Java-Syntax für "oder".


Ansonsten den Code bitte in JAVA-Tags einschließen, das erhöht die Lesbarkeit ungemein:

Java:
//dein Code

[/$JAVA]

$ natürlich entfernen
 
Zuletzt bearbeitet:

ClaireFraser

Mitglied
Saheeda, vielen vielen Dank für deinen Denkanstoß... klingt auf jeden Fall schon ein Stück schlauer, als meins. ;-)
Allerdings hat sich jetzt beim Probieren gezeigt, dass der zweite Käfer sich gar nicht mehr bewegt, also einfach auf seinem Anfangspunkt stehen bleibt.
Dieser soll ja auch ein anderer sein, als der Endpunkt (Endpunkt = die Koordinaten vom ersten Käfer), deswegen weiß ich gar nicht, ob das überhaupt richtig ist, dass ich dem Käefer2 die Koordinaten dann am Anfang gebe?!
An dieser Aufgabe beißen sich leider auch meine Kommilitonen gerade die Zähne aus :-/

Momentan sieht es so aus:

Java:
public class Uebung11
{
 
    public static void main(String argumente[])
    {
        KaeferFenster fenster = new KaeferFenster();
        KaeferWelt welt = fenster.getWelt();
        Kaefer kaefer = new Kaefer(welt);
        Kaefer kaefer2 = new Kaefer(welt);


        // Bewegungen
        for (int i=0; i<=20; i++)
        { 
            kaefer.vor();            
            if( kaefer.vorBaum() ) //true
            {
                kaefer.rechts();
                kaefer.vor();
                kaefer.links();
                kaefer.vor();
                kaefer.vor();
                kaefer.links();
                kaefer.vor();
                kaefer.rechts();
            }
            if( kaefer.vorPilz() ) //true
            {
                kaefer.rechts();
                kaefer.vor();
                kaefer.links();
                kaefer.vor();
                kaefer.vor();
                kaefer.links();
                kaefer.vor();
                kaefer.rechts();
            }
            System.out.println(kaefer.getX() + " " + kaefer.getY());
            
            
            
            
        }
        
        
        
        for(int i = kaefer.getX(); i< kaefer.getY(); i++)
        { 
            kaefer2.vor();
            if( kaefer2.vorBaum() ) //true
            {
                kaefer2.rechts();
                kaefer2.vor();
                kaefer2.links();
                kaefer2.vor();
                kaefer2.vor();
                kaefer2.links();
                kaefer2.vor();
                kaefer2.rechts();
            }
            if( kaefer2.vorPilz() ) //true
            {
                kaefer2.rechts();
                kaefer2.vor();
                kaefer2.links();
                kaefer2.vor();
                kaefer2.vor();
                kaefer2.links();
                kaefer2.vor();
                kaefer2.rechts();
            }
        }
       
    }

    
}

Danke für den Tip, wie ich es richtig hier darstellen kann. Und auch danke für den Hinweis mit der Zusammenfassung der ifs... das mache ich eventuell dann noch, wenn sich mein eigentliches Problem gelöst hat ;-)
 

ClaireFraser

Mitglied
Habe es jetzt mal in Folgendes geändert:

Java:
for(int i=0; i<= kaefer.getY() + kaefer.getX(); i++)

sodass der Startpunkt ein anderer ist, wie der Endpunkt. Ich habe ihm ja bisher nur den Befehl "vor" gegeben. Er kennt aber auch "links" und "rechts", die er jetzt auch gesagt bekommen müsste, da der andere Käfer, zu dem er laufen muss, nicht auf seiner "vor-"Strecke liegt...
 
Zuletzt bearbeitet von einem Moderator:

ClaireFraser

Mitglied
Ich würde ihm halt gerne sagen, dass er

entweder nach vorne, oder nach rechts, oder nach links laufen muss

Also, dass er selbst entscheidet, wie er am schnellsten zum anderen Käfer kommt...
 

Saheeda

Top Contributor
Hi,

zweimal denselben Pfad abzulaufen und den kürzesten Weg von A nach B zu finden sind zwei komplett verschiedene Problemstellungen. Nr. 1 ist ein simples Speichern des gegangenen Weges, z.B. in einer Liste, und erneutes Abrufen.
Nr. 2 gehört in die Pfadoptimierung und ist eines der "klassischen" Probleme. Ne Stufe höher wären dann z.B. Labyrinth, Travelling Salesman und ähnliches.


Ich würde zunächst erstmal die Berechnung der X- und Y- Koordinaten trennen und einzeln behandeln. Eine Möglichkeit, sowas dann zu implementieren wäre z.B (in Pseudocode):

K1 = Käfer1
K2 = Käfer2
Code:
Solange Position von K2 ungleich der von K1 ist:
     Wenn x von K2 kleiner als x von K1
               Erhöhe x von K2 um 1
    Wenn x von K2 größer ist als x von K1
               Verringere x um 1

    Wenn y von K2 kleiner als y von K1
              Erhöhe y von K2 um 1
    Wenn y von K2 größer ist als y von K1
               Verringere y von K2 um 1
 
Zuletzt bearbeitet:

ClaireFraser

Mitglied
Ah, ok, hatte die ganze Zeit eine andere Idee im Kopf, aber deins klingt auch nach einer möglichen Variante. Werde ich mal dran rumbasteln, noch habe ich 3 Stunden Zeit.
Vielen lieben Dank nochmal an dich!! :)
 

Flown

Administrator
Mitarbeiter
Rein aus Interesse gibt es dafür ein Übungsblatt(+Template wenn verfügbar)? Wenn ja lad es doch hier mal hoch, dann kann man dir auch eine Musterlösung liefern und dann wirds beim nächsten mal klarer.
 

ClaireFraser

Mitglied
Hey Flown, leider nicht so wirklich. Die Aufgaben bauen alle aufeinander auf und es ist schwierig da jetzt nur das eine reinzustellen. ;-) Aber wir werden es vermutlich ja noch besprechen, also werde ich hoffentlich noch zu meinem Wissen kommen :)
 

Neue Themen


Oben