gelöst For schleife in Java

Joined
Aug 6, 2001
Messages
5,987
Points
0
Servus Jungs (und Mädels),

brauche eure Hilfe. Und zwar hab ich ein in Java programmiertes Macro, das ich ganz oft wiederholen will, aber eben gewisse werte austauschen. Von mir aus kann das ganze auch nur einmal erstellt werden und dann abgespeichert sein. Muss nicht als for Schlaufe programmiere sein, was natürlich auch gehen würde. Bin mit Java leider nicht ganz firm und hab daher mal versuch den Text mit dem Editor zu ersetzen. Funktioniert aber nicht, weil der Notepad dann nur eine Zeile einfügt.

WÜrd mich total freuen wenn mir einer helfen könnte. Code ist angehängt. Die herunterlaufenden Zeichen sind zu sehen. Alternativ gibts die vorlage0.txt in denen die zeichen $rpl1 durch die jeweiligen txt dateien

Java:
// STAR-CCM+ macro: plane_verschieben_foto.java
package macro;

import java.util.*;

import star.common.*;
import star.base.neo.*;
import star.vis.*;

public class plane_verschieben_foto extends StarMacro {

  public void execute() {
    execute0();
  }

  private void execute0() {

    Simulation simulation_0 = 
      getActiveSimulation();

    Scene scene_1 = 
      simulation_0.getSceneManager().getScene("Geometry Scene 5");

    PartDisplayer partDisplayer_8 = 
      ((PartDisplayer) scene_1.getHighlightDisplayer());

    PlaneSection planeSection_0 = 
      ((PlaneSection) simulation_0.getPartManager().getObject("plane section"));

    partDisplayer_8.getParts().setObjects(planeSection_0);

    PartDisplayer partDisplayer_6 = 
      ((PartDisplayer) scene_1.getCreatorDisplayer());

    FvRepresentation fvRepresentation_0 = 
      ((FvRepresentation) simulation_0.getRepresentationManager().getObject("Volume Mesh"));

    partDisplayer_6.setRepresentation(fvRepresentation_0);

    planeSection_0.setBatched(true);

    LabCoordinateSystem labCoordinateSystem_0 = 
      simulation_0.getCoordinateSystemManager().getLabCoordinateSystem();

    planeSection_0.setCoordinateSystem(labCoordinateSystem_0);

    Coordinate coordinate_2 = 
      planeSection_0.getOriginCoordinate();

    Units units_0 = 
      ((Units) simulation_0.getUnitsManager().getObject("m"));

    coordinate_2.setCoordinate(units_0, units_0, units_0, new DoubleVector(new double[] {-1, 0.0, 0.0}));

    Coordinate coordinate_3 = 
      planeSection_0.getOrientationCoordinate();

    coordinate_3.setCoordinate(units_0, units_0, units_0, new DoubleVector(new double[] {1.0, 0.0, 0.0}));

    coordinate_3.setValue(new DoubleVector(new double[] {1.0, 0.0, 0.0}));

    coordinate_2.setValue(new DoubleVector(new double[] {-0.95 , 0.0, 0.0}));

    SingleValue singleValue_0 = 
      planeSection_0.getSingleValue();

    singleValue_0.getValueQuantity().setValue(0.0);

    singleValue_0.getValueQuantity().setUnits(units_0);

    RangeMultiValue rangeMultiValue_0 = 
      planeSection_0.getRangeMultiValue();

    rangeMultiValue_0.setNValues(2);

    rangeMultiValue_0.getStartQuantity().setValue(0.0);

    rangeMultiValue_0.getStartQuantity().setUnits(units_0);

    rangeMultiValue_0.getEndQuantity().setValue(1.0);

    rangeMultiValue_0.getEndQuantity().setUnits(units_0);

    DeltaMultiValue deltaMultiValue_0 = 
      planeSection_0.getDeltaMultiValue();

    deltaMultiValue_0.setNValues(2);

    deltaMultiValue_0.getStartQuantity().setValue(0.0);

    deltaMultiValue_0.getStartQuantity().setUnits(units_0);

    deltaMultiValue_0.getDeltaQuantity().setValue(1.0);

    deltaMultiValue_0.getDeltaQuantity().setUnits(units_0);

    MultiValue multiValue_0 = 
      planeSection_0.getArbitraryMultiValue();

    multiValue_0.getValueQuantities().setUnits(units_0);

    multiValue_0.getValueQuantities().setArray(new DoubleVector(new double[] {0.0}));

    planeSection_0.setValueMode(0);

    planeSection_0.setBatched(false);

    CurrentView currentView_1 = 
      scene_1.getCurrentView();

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    partDisplayer_8.getParts().setObjects();

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    partDisplayer_8.getParts().setObjects(planeSection_0, planeSection_0);

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    partDisplayer_8.getParts().setObjects();

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    scene_1.printAndWait(resolvePath("D:\\Aero13\\vid\\foto1.png"), 1, 1330, 794);
    partDisplayer_8.getParts().setObjects(planeSection_0);

    partDisplayer_6.setRepresentation(fvRepresentation_0);

    planeSection_0.setBatched(true);

    planeSection_0.setCoordinateSystem(labCoordinateSystem_0);

    coordinate_2.setCoordinate(units_0, units_0, units_0, new DoubleVector(new double[] {-0.95, 0.0, 0.0}));

    Coordinate coordinate_3 = 
      planeSection_0.getOrientationCoordinate();

    coordinate_3.setCoordinate(units_0, units_0, units_0, new DoubleVector(new double[] {1.0, 0.0, 0.0}));

    coordinate_3.setValue(new DoubleVector(new double[] {1.0, 0.0, 0.0}));

    coordinate_2.setValue(new DoubleVector(new double[] {-0.9 , 0.0, 0.0}));

    SingleValue singleValue_0 = 
      planeSection_0.getSingleValue();

    singleValue_0.getValueQuantity().setValue(0.0);

    singleValue_0.getValueQuantity().setUnits(units_0);

    RangeMultiValue rangeMultiValue_0 = 
      planeSection_0.getRangeMultiValue();

    rangeMultiValue_0.setNValues(2);

    rangeMultiValue_0.getStartQuantity().setValue(0.0);

    rangeMultiValue_0.getStartQuantity().setUnits(units_0);

    rangeMultiValue_0.getEndQuantity().setValue(1.0);

    rangeMultiValue_0.getEndQuantity().setUnits(units_0);

    DeltaMultiValue deltaMultiValue_0 = 
      planeSection_0.getDeltaMultiValue();

    deltaMultiValue_0.setNValues(2);

    deltaMultiValue_0.getStartQuantity().setValue(0.0);

    deltaMultiValue_0.getStartQuantity().setUnits(units_0);

    deltaMultiValue_0.getDeltaQuantity().setValue(1.0);

    deltaMultiValue_0.getDeltaQuantity().setUnits(units_0);

    MultiValue multiValue_0 = 
      planeSection_0.getArbitraryMultiValue();

    multiValue_0.getValueQuantities().setUnits(units_0);

    multiValue_0.getValueQuantities().setArray(new DoubleVector(new double[] {0.0}));

    planeSection_0.setValueMode(0);

    planeSection_0.setBatched(false);

    CurrentView currentView_1 = 
      scene_1.getCurrentView();

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    partDisplayer_8.getParts().setObjects();

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    partDisplayer_8.getParts().setObjects(planeSection_0, planeSection_0);

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    partDisplayer_8.getParts().setObjects();

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    scene_1.printAndWait(resolvePath("D:\\Aero13\\vid\\foto2.png"), 1, 1330, 794); 
    partDisplayer_8.getParts().setObjects(planeSection_0);

    partDisplayer_6.setRepresentation(fvRepresentation_0);

    planeSection_0.setBatched(true);

    planeSection_0.setCoordinateSystem(labCoordinateSystem_0);

    coordinate_2.setCoordinate(units_0, units_0, units_0, new DoubleVector(new double[] { -0.9, 0.0, 0.0}));

    Coordinate coordinate_3 = 
      planeSection_0.getOrientationCoordinate();

    coordinate_3.setCoordinate(units_0, units_0, units_0, new DoubleVector(new double[] {1.0, 0.0, 0.0}));

    coordinate_3.setValue(new DoubleVector(new double[] {1.0, 0.0, 0.0}));

    coordinate_2.setValue(new DoubleVector(new double[] {-0.85 , 0.0, 0.0}));

    SingleValue singleValue_0 = 
      planeSection_0.getSingleValue();

    singleValue_0.getValueQuantity().setValue(0.0);

    singleValue_0.getValueQuantity().setUnits(units_0);

    RangeMultiValue rangeMultiValue_0 = 
      planeSection_0.getRangeMultiValue();

    rangeMultiValue_0.setNValues(2);

    rangeMultiValue_0.getStartQuantity().setValue(0.0);

    rangeMultiValue_0.getStartQuantity().setUnits(units_0);

    rangeMultiValue_0.getEndQuantity().setValue(1.0);

    rangeMultiValue_0.getEndQuantity().setUnits(units_0);

    DeltaMultiValue deltaMultiValue_0 = 
      planeSection_0.getDeltaMultiValue();

    deltaMultiValue_0.setNValues(2);

    deltaMultiValue_0.getStartQuantity().setValue(0.0);

    deltaMultiValue_0.getStartQuantity().setUnits(units_0);

    deltaMultiValue_0.getDeltaQuantity().setValue(1.0);

    deltaMultiValue_0.getDeltaQuantity().setUnits(units_0);

    MultiValue multiValue_0 = 
      planeSection_0.getArbitraryMultiValue();

    multiValue_0.getValueQuantities().setUnits(units_0);

    multiValue_0.getValueQuantities().setArray(new DoubleVector(new double[] {0.0}));

    planeSection_0.setValueMode(0);

    planeSection_0.setBatched(false);

    CurrentView currentView_1 = 
      scene_1.getCurrentView();

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    partDisplayer_8.getParts().setObjects();

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    partDisplayer_8.getParts().setObjects(planeSection_0, planeSection_0);

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    partDisplayer_8.getParts().setObjects();

    currentView_1.setInput(new DoubleVector(new double[] {-0.9196153454980884, 0.4312826924294341, 2.242836172369032}), new DoubleVector(new double[] {-14.277842732581199, 0.43127552519586165, 2.2428361723826455}), new DoubleVector(new double[] {1.0191208770979343E-12, 5.46799937411148E-19, 1.0}), 2.4362244767543144, 1);

    scene_1.printAndWait(resolvePath("D:\\Aero13\\vid\\foto3.png"), 1, 1330, 794);
 

Attachments

  • repl0.txt
    1.5 KB · Views: 3
  • repl1.txt
    319 bytes · Views: 2
  • repl2.txt
    347 bytes · Views: 0
  • repl3.txt
    2.8 KB · Views: 1
  • repl4.txt
    22 bytes · Views: 2
  • vorlage0.txt
    3.1 KB · Views: 2
hae wat? ich hab keen star.*
und was spricht gegen string.replaceAll?
sed -e 's/\$repl4/\.jpg/g;s/\$repl[0-9][0-9]\.[0-9]/\/scheisse mit reis\//g' <vorlage0.txt >vorlage1.txt ; cat vorlage1.txt
 
Okay, das ganze ginge eigentlich auch viel einfacher. Ich bräuchte nur eine for Schleife die in folgendem Code
coordinate_3.setValue(new DoubleVector(new double[] {1.0, 0.0, 0.0}));

Die 1.0 jeweils um 0.02 reduziert.

Heiißt folgendes sollte ausgegeben werden:

coordinate_3.setValue(new DoubleVector(new double[] {1.0, 0.0, 0.0}));
coordinate_3.setValue(new DoubleVector(new double[] {0.98, 0.0, 0.0}));
coordinate_3.setValue(new DoubleVector(new double[] {0.96, 0.0, 0.0}));
coordinate_3.setValue(new DoubleVector(new double[] {0.94, 0.0, 0.0}));

Der wert solte dann von 1.00 bis -3.00 gehen. Vielleicht kann mir jetzt ja jemand helfen! :D

Ahso ja, das ganze in Java bitte. Deswegen bin ich ja so hilflos...
 
Last edited:
Auf Wunsch des Erstellers Threadtitel angepasst
 
Hab jetzt die richtige Syntax nicht mehr im Kopf, aber setz doch eine Variable vor dem Schleifenaufruf auf 1.0, setz sie in der Schleife für die 1. Koordinate ein
coordinate_3.setValue(new DoubleVector(new double[] {x, 0.0, 0.0}));

und am ende jeder Schleife wird x halt um 0.02 reduziert oO Dürften doch drei Zeilen sein.
 
for(double x = 1; x > -3; x = x-0.02) {
coordinate_3.setValue(new DoubleVector(new double[] {x, 0.0, 0.0}));
}

das sollte es doch tun?
 
fast, da die -3 zulässig ist muss hier auf größer gleich geprüft werden.

Java:
for(double x = 1; x >= -3; x -= 0.2) {
  coordinate_3.setValue(new DoubleVector(new double[] {x, 0.0, 0.0}));
}

Generell wirkt der am Anfang gezeigte Code aber sehr unstrukturiert. Ich habe auch noch nicht ganz das eigentlich Ziel verstanden. Kannst du nochmal kurz erklären, was die Eingabe das Programmes ist und was die Ausgabe sein soll? Dann lässt sich vielleicht eine bessere Lösung finden.
 
Sorry. Der erste Code war auch nur der verzweifelte Versuch ne for schleife durch ein Programm zu ersetzen was "suchen und ersetzen" mit zeilensprüngen kann. Habs jetzt aber selbst gelöst und mir ne eigene for Schleife gecodet. Trotzdem vielen Dank an alle die helfen wollen!

Java:
    double z=-1.5;


  	for (int i = 0; i <= 400; i++)            
        {
                z=(i/100)-1.5; 

		coordinate_2.setCoordinate(units_0, units_0, units_0, new DoubleVector(new double[] {z, 0.0, 0.0}));

    		scene_3.printAndWait(resolvePath("D:\\aero13\\verlauf\\verlauf"+i+".jpg"), 1, 1544, 916);

	}

Ne ziemlich Hilfe war übrigens https://compilr.com/
Da konnte ich das Programm direkt online testen...
 
Sehr schön.

Ich hätte da noch ein paar kleine Anmerkungen.

Warum wird die Variable z außerhalb der Schleife deklariert und initialisiert?
Warum wird die Berechnung (i/100)-1.5 zunächst in einer Variable gespeichert und nicht direkt bei der Initialisierung des Arrays durchgeführt?
Wozu verwendest du String resolvePath(String path), wenn du bereits einen absoluten Pfad angibst?
 
Habe außerhalb der Schleife deklariert damit dies nur einmal durchgeführt wird. Die erste initialisierung hätte ich mir sparen können. Ist der früheren Version geschuldest, bei der ich nur ausproboert habe ob er die Variable z direkt so frisst.

Hab keine Ahnung was jetzt vom Rechenaufwand her größer ist. In der Schleife deklarieren und direkt bei der Deklarierung berechnen lassen oder einmal außerhalb deklarieren und dafür jedesmal neu berechnen lassen. Dachte so gefühlsmäßig spar ich mir was wenn ich nur einmal deklariere. Berechnen lassen muss ich ja jedesmal.

Berechnung direkt bei der Initialisierung angeben wäre vermutlich noch ne schöne Möglichkeit das Skript zu kürzen. Aber ehrlich gesagt war ich froh als es so funktioniert hat und er z trotzdem als gleitkommazahl ausgegeben hat obwohl i net int Variable war.

die "scene_3.printAndWait(resolvePath("D:\\aero13\\verlauf\\verlauf"+i+".jpg"), 1, 1544, 916);" wurde mir vom programm so vergegeben. Es handelt sich um ein Macro für ein CFD Programm. Ich hab das ganze also nicht selbst geschrieben sondern nur abgeändert. Daher war mir die einfachste und schnellstmöglich funktioniernde Möglichkeit auch die Liebste :).

Wenn du Lust hast können wir das Script gerne noch ein wenig optimieren. Da die 400 Durchläufe relativ lang brauchen bin ich froh um jede Zeitersparnis!
 
Ok, da die Deklarierung also nur aus Gründen der Mikrooptimierung versetzt wurde, würde ich anraten den Quelltext in folgende Form zu bringen:
Java:
for (int i = 0; i <= 400; i++)            
{
  coordinate_2.setCoordinate(units_0, units_0, units_0, new DoubleVector(new double[] {(i/100)-1.5, 0.0, 0.0}));
  scene_3.printAndWait("D:\\aero13\\verlauf\\verlauf" + i + ".jpg", 1, 1544, 916);
}
Die Mikrooptimierung des Quelltextes verringert im Allgemeinen nicht die Laufzeit des Programms und verschlechtern somit nur die Lesbarkeit. Der (JIT-)Compiler wird derartige Optimierungen bereits vornehmen.
"String resolvePath(String path)" würde ich komplett rausnehmen, da hier bereits der absolute Pfad angegeben wird.
 
Sorry. Der erste Code war auch nur der verzweifelte Versuch ne for schleife durch ein Programm zu ersetzen was "suchen und ersetzen" mit zeilensprüngen kann. Habs jetzt aber selbst gelöst und mir ne eigene for Schleife gecodet. Trotzdem vielen Dank an alle die helfen wollen!

Java:
    double z=-1.5;


  	for (int i = 0; i <= 400; i++)            
        {
                z=(i/100)-1.5; 

		coordinate_2.setCoordinate(units_0, units_0, units_0, new DoubleVector(new double[] {z, 0.0, 0.0}));

    		scene_3.printAndWait(resolvePath("D:\\aero13\\verlauf\\verlauf"+i+".jpg"), 1, 1544, 916);

	}

Ne ziemlich Hilfe war übrigens http://www.programmierenlernen24.de/java-programmieren-lernen/

Ich bin mir jetzt nicht 100%ig sicher, aber ich denke, die Zeile z = (i/100) - 1.5; sollte z = (i/100.0) - 1.5; heißen. So wie Du das schreibst wird nach meinem Wissen das i/100 (ungewünschterweise) zunächst auf int gecastet und dann erst bei der Subtraktion mit 1.5 auf double umgewandelt.
 
Last edited:
Back
Top Bottom