Funktion definieren und ausfuehren

  • Themenstarter Themenstarter jalexus
  • Beginndatum Beginndatum
J

jalexus

Gast
Hallo,

ich habe eine sehr einfache Frage bezueglich eines Java-Macros. Ich habe schon einige Zeit damit verbracht, bei Google zu suchen und dort die gefundenen Sachen auszuprobieren, jedoch hat dies nie funktioniert. Ich moechte lediglich eine Funktion erstellen, welche ich spaeter mehrere Male ausfuehren kann.
Der Code ist fuer ein Programm-Macro, welches komplett in Java geschrieben wird. Ich habe in der Uni mal C "gelernt", jedoch kann ich das leider nicht auf Java uebertragen. Bei C haette mein Vorhaben wohl in etwa so ausgesehen:

// Definieren der Funktion:
function OutputValues() {
Ausfuehren einiger Programmbefehle...
}
// Ausfuehren der OutputValues-Funktion:
OutputValues();
OutputValues();
OutputValues();
...

Das Macro funktioniert eigentlich ohne Probleme, jedoch habe ich dabei ueber Copy&Paste laengere Befehle bestimmt 10x kopiert, sodass der Code viel laenger ist als benoetigt. Ich wuerde gerne dieses Befehle, welche ich mehrfach identisch benoetige, am Beginn des Macros 1x definieren und spaeter nur noch ueber Einzeiler aufrufen. Bei Aenderungen an den Befehlen muesste ich diese Aenderungen auch nur 1x durchfuehren und nicht 10x.
Koennt Ihr mir damit helfen?

Vielen Dank im Voraus!

Alex
 
Schon mal danke fuer Deine Antwort. Das ist eine Variante, welche ich auch schon ausprobiert hatte. Jedoch bekomme ich dann beim Ausfuehren des Macros die Meldung "illigal start of expression" und " ';' expected" fuer diese Zeile. Muss ich evtl etwas besonderes im Header hinzufuegen wie "import java.*****", damit das funktioniert? Sorry, bin absoluter Anfaenger.

Gruesse

Alex
 
Jedoch bekomme ich dann beim Ausfuehren des Macros die Meldung "illigal start of expression" und " ';' expected" fuer diese Zeile
Ohne Code kann man dazu nichts sagen.


Einfaches Beispiel:

Java:
public class MeineKlasse {
    
    public static void main(String[] argv){
        meineMethode();
        meineMethode();
        meineMethode();
    }
    
    public static void meineMethode(){
        System.out.println(System.nanoTime());
    }
}

Ausgabe:

Java:
35419698545061
35419698761916
35419698858153
 
Danke, jetzt sagt er "nur" noch "illigal start of expression". Habe deine erste Zeile 1:1 uebernommen.
 
Poste doch mal deinen Code. Ohne den ist die Fehlermeldung nutzlos. Der Code von Final_Striker funktioniert.
 
Java:
public class run_speedline_function extends ProgramMacro {

  public void execute() {
    execute0();
  }

  private void execute0() {

//einige Befehle

// an dieser Stelle wollte ich die Funktion definieren

  try {

//einige Befehle

// an dieser Stelle wuerde ich dann gerne die Funktion mehrfach ausfuehren lassen

}
}
}
Das ist die grobe Struktur, dazwischen sind jeweils nur programmspezifische Befehle.
 
Daran ist (bis auf das nicht einhalten der Konventionen) nichts falsch. Der Fehler muss woanders liegen.
 
Das ist auch der Code, der funktioniert. Jedoch wenn ich dann zB die von euch vorgeschlagenen Befehle an der beschriebenen Stelle einfuege, dann kommt immer dieses "illegal expression"
 
Du kannst auch nicht einfach so irgendwelchen Code an irgendwelche Stellen einfügen. Ein Programm hat feste Strukturen und Regeln was Klassen und Methoden angeht, da hat man sich dran zu halten.
Poste doch mal den Code der nicht funktioniert, sag dazu WAS nicht funktioniert und was passieren soll.
 
Java:
public class run_speedline_function extends ProgramMacro {
 
  public void execute() {
    execute0();
  }
 
  private void execute0() {
 
//einige Befehle
 
   // Funktion definieren
   public void outputValues(){
     // Funktion
   }
  
  try {
 
//einige Befehle

        // Funktion ausfuehren 
        outputValues();
        outputValues();

}

Das war die 1. Variante von Julian. Da sagt er jedoch in der "public void ..."-Zeile, dass es eine illegal expression ist und dass ein ; in dieser Zeile fehlt.
 
- Da fehlen einige schließende Klammern
- Die Methode outputValues steht in der Methode execute0, das geht nicht.
- zum try fehlt noch nen catch oder finally
- Die outputValues() stehen in keiner Methode
 
Java:
public class run_speedline_function extends ProgramMacro {
 
  public void execute() {
    execute0();
  }
 
  private void execute0() {
 
//einige Befehle
 
   // Funktion definieren
   public void outputValues(){
     // Funktion
   }
  
  try {
 
//einige Befehle

        // Funktion ausfuehren 
        outputValues();
        outputValues();

}

Das war die 1. Variante von Julian. Da sagt er jedoch in der "public void ..."-Zeile, dass es eine illegal expression ist und dass ein ; in dieser Zeile fehlt.

Java:
  private void execute0() {
 
//einige Befehle
}

oder verstehe ich den code nicht? Die geschweifte Klammer geht doch nicht zu?! 🙂
 
Java:
public class RunSpeedlineFunction extends ProgramMacro {
    
    public void execute() {
        execute0();
    }

    private void execute0() {
        try {
            outputValues();
        } finally {
            //?
        }
    }

    public void outputValues() {
        // Funktion
    }
}

Warum benutzt man hier try? 🙂 Gruß
 
- Da fehlen einige schließende Klammern
Ja, sorry, die restlichen Klammern habe ich irgendwie nicht eingefuegt, sie sind aber da.

- Die Methode outputValues steht in der Methode execute0, das geht nicht.

Das ist eine sehr nuetzliche Information. Ich dachte, das waere kein Problem. Kann ich die execute0 schliessen und die OutputValues in den try-Befehl integrieren?

- zum try fehlt noch nen catch oder finally

Der catch-Befehl ist da, habe ich vergessen einzufuegen, sorry.

- Die outputValues() stehen in keiner Methode

Was bedeutet das?
 
Java:
public class RunSpeedlineFunction extends ProgramMacro {
    
    public void execute() {
        execute0();
    }

    private void execute0() {
        try {
            outputValues();
        } finally {
            //?
        }
    }

    public void outputValues() {
        // Funktion
    }
}

Warum benutzt man hier try? 🙂 Gruß

Der try-Befehl ist vom Programm so vorgegeben.
Muss die Funktion im Code nicht vorher definiert werden bevor man sie aufruft?!
 
@TO

Ganz ehrlich. Gibt es keine Möglichkeit für dich an das Grundlagenwissen zu kommen, außer jeden kleinsten Fehler hier zu posten..?

Imho ist das Forum dazu nicht da.
 
Java:
public class RunSpeedlineFunction extends ProgramMacro {
    
    public void execute() {
        execute0();
    }
 
    private void execute0() {
        try {
            outputValues();

         } catch (IOException ex) {
      ex.printStackTrace();
      }    
    }

    public static void main (String[] args){
    outputValues();
    outputValues();
    // warum 2x?
    }
 
    public void outputValues() {
        // Funktion
    }
}

Geht das dann so? Wird dann am Ende die Funktion nicht erneut (ungewollt) ausgefuehrt oder ist das nur die Definition ohne Ausfuehrung?
 
@TO

Ganz ehrlich. Gibt es keine Möglichkeit für dich an das Grundlagenwissen zu kommen, außer jeden kleinsten Fehler hier zu posten..?

Imho ist das Forum dazu nicht da.

Ganz ehrlich. Ich benoetige Java nur fuer dieses eine Macro und ich dachte, das Problem waere quasi mit 2-3 Posts erledigt. Sorry, dass ich euch die Zeit stehle...
 
Java:
public class RunSpeedlineFunction extends ProgramMacro {
    
    public void execute() {
        execute0();
    }
 
    private void execute0() {
        try {
            outputValues();

         } catch (IOException ex) {
      ex.printStackTrace();
      }    
    }

    public static void main (String[] args){
    outputValues();
    outputValues();
    // warum 2x?
    }
 
    public void outputValues() {
        // Funktion
    }
}

Geht das dann so? Wird dann am Ende die Funktion nicht erneut (ungewollt) ausgefuehrt oder ist das nur die Definition ohne Ausfuehrung?


Es wird erstmal nur die main methode ausgeführt, weil diese statisch ist und ohne ein Objekt ausgeführt werden kann, glaube ich. Alles Methoden die du in der Main aufrufst werden ausgeführt, also nicht execute(). 2x weil es bei dir auch 2 mal stand ^^.
Was ist das eigentlich für ein Programm? Gruß ^^
 
Ich glaube/hoffe, ich habe die Struktur nun besser verstanden und es etwas umgebaut:

Java:
public class run_speedline_function extends StarMacro {

  public void execute() {

  // Definition einiger Variablen

  try {
       OutputValues();
       OutputValues();
  } catch (IOException ex) {
      ex.printStackTrace();
  }
}

  public void OutputValues(){

// Ausfuehren diverser Befehle mit Verwendung der Variablen, welche in execute() definiert wurden

  }
}

Das Problem ist nun, dass er in der OutputValues Funktion nicht auf die zuvor definierten Variablen zugreifen kann... Kann man die irgendwie global definieren oder einfacher uebergeben?
 
Das Problem ist nun, dass er in der OutputValues Funktion nicht auf die zuvor definierten Variablen zugreifen kann... Kann man die irgendwie global definieren oder einfacher uebergeben?

Java:
public class run_speedline_function extends StarMacro {
 
   private int meineVariable = 0;
 
   public void OutputValues(){
 
      meineVariable = 5;
 
  }
}
 
Ich habe heute morgen noch einige Zeit damit verbracht, den Code anzupassen. Meiner Meinung nach scheitert es jedoch im Endeffekt an den programmspezifischen Befehlen.

Daher habe ich mich nun dafuer entschieden, eine for-Schleife laufen zu lassen.

Dazu eine kurze Frage:

Ich habe die Variable PR0 und die Variablen PR1 bis PR8.
Wie kann ich (am besten als Einzeiler) einstellen, dass im 1. Durchlauf der Schleife PR0 = PR1 ist, beim 2. Durchlauf PR0 = PR2 ist usw. bis beim letzten Durchlauf PR0 = PR8 ist? Die Anzahl der Durchlaeufe reguliere ich ueber die Laufvariable i.

Danke!
 
Wie kann ich (am besten als Einzeiler) einstellen, dass im 1. Durchlauf der Schleife PR0 = PR1 ist, beim 2. Durchlauf PR0 = PR2 ist usw. bis beim letzten Durchlauf PR0 = PR8 ist? Die Anzahl der Durchlaeufe reguliere ich ueber die Laufvariable i.

In dem du anstatt der Variablen PR1 bis PR8 ein Array verwendest.
 

Zurück
Oben