Java Code, Parameter i, Schleife? Wie umsetzen?

maverick1993s

Cadet 2nd Year
Registriert
Juli 2020
Beiträge
18
Hallo Zusammen,

leider bin ich totaler Anfänger und suche Hilfe bei der Erstellung eines Java Codes zur Automatisierung eines Befehls in einer Software(Ingenieursbereich).

Es geht um folgenden Befehl:
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", new String[]{"sel1", "sel2", "sel3", "sel4", "sel5", "sel6", "sel7", "sel11", "sel12", "sel13", "sel14", "sel15", "sel16", "sel17", "sel18", "sel8", "sel9", "sel10"});

Jedoch ist die Anzahl der "sel" variabel und soll durch einen Parameter i angesteuert werden.
D.h. z.B.
i=1
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", new String[]{"sel1"});

oder i=3
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", new String[]{"sel1", "sel2", "sel3});

Wie kann ich den Code gestaltet, sodass er sich nach dem i entsprechend aufbaut?

Vielen Dank!!!!
 
Setz dich mal mit Schleifen und Listen außeinander, damit solltest du das hinkriegen.
 
  • Gefällt mir
Reaktionen: playerthreeone und BeBur
ich nutze for-Schleifen des öfteren. Aber damit bekomme ich es nur so hin:
i=3
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", new String[]{"sel1"});
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", new String[]{"sel2"});
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", new String[]{"sel3"});

Und nicht insofern, dass er die erste Zeile ergänzt
 
So vielleicht:

Gegeben ist der Parameter i und der ist 3.

Code:
string[] selString = new string[i];

for (int j=0;j<i;j++)
{
    selString[j]="sel"+(j+1).ToString();
}
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", selString);

Ist jetzt nicht Java, sondern C#, aber die Idee sollte klar werden.
 
  • Gefällt mir
Reaktionen: KenshiHH
Noch ein Tipp von meiner Seite: nutze die For-Schleife, um eine Liste zu füllen (eben dem Input) und forme die Liste in einen String um.
 
Und schreib deinen Code auch bitte hier im Forum in Code. Das ist mobil unlesbar....
 
Danke für die vielen Antworten, ich probiere mich gerade.
Ergänzung ()

DocWindows schrieb:
So vielleicht:

Gegeben ist der Parameter i und der ist 3.

Code:
string[] selString = new string[i];

for (int j=0;j<i;j++)
{
    selString[j]="sel"+(j+1).ToString();
}
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", selString);

Ist jetzt nicht Java, sondern C#, aber die Idee sollte klar werden.

versuch.JPG


Und kämpfe mit diesen Meldungen
 
Und die Fehlermeldungen sind jetzt schwierig zu verstehen?
i ist halt nicht definiert und sollte mit dem Wert initialisiert werden wie viele Elemente du erzeugen möchtest.

Ein Integer hat keine ToString Member Methode in Java also musst du dir was Anderes einfallen lassen und rausfinden wie man ein Integer in einen String umwandelt.

Die Lösung gibt es aber nicht sondern ist deine Hausaufgabe ;)
 
  • Gefällt mir
Reaktionen: Ebrithil, BeBur und Wotan4
@maverick1993s Du hast doch gesagt die Variable i wäre ein Parameter. Dann musst du den auch selbst definieren. Das habe ich in meinem Beispiel nicht gemacht. Hab ja geschrieben "Gegeben ist der Parameter i mit einem Wert von 3". Musst du vorher halt selbst definieren.

Das (j+1).ToString() nicht geht, kann sein, weil es ein Codebeispiel in C# ist und nicht in Java.
Da musst du dann selbst mal gucken wie man in Java einen int-Wert in einen String umwandelt.
 
Zuletzt bearbeitet:
So bist du flexibel ohne feste Arraygröße unterwegs und sparst dir eine Variable:
Code:
        int i = 18;
        List<String> selString = new ArrayList<>();
       
        while(selString.size() < i) {
            selString.add("sel" + selString.size());
        }
        model.component("comp1").geom("geom1").feature("uniselZellen").set("input", selString.toArray(new String[0]));
 
Kinders, es gibt auch Streams: 😉
Java:
String[] selStrings(int count) {
 return IntStream.range(1, count+1).mapToObj(i -> "sel"+i).toArray(String[]::new);
}
 
Hallo Zusammen,
ich möchte den Code wieder aufgreifen und erweitern, wofür ich wieder etwas Hilfe bräuchte.
Bisher hatte ich die Lösung von DocWindows implementiert:
DocWindows schrieb:
So vielleicht:

Gegeben ist der Parameter i und der ist 3.

Code:
string[] selString = new string[i];

for (int j=0;j<i;j++)
{
    selString[j]="sel"+(j+1).ToString();
}
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", selString);

Ist jetzt nicht Java, sondern C#, aber die Idee sollte klar werden.

Nun möchte ich noch eine Abfrage hinzufügen und vorher prüfen ob bestimmte Bedingungen vorliegen.
Der Code oben liefert bspw.:
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", new String[]{"sel1", "sel2", "sel3"});

Nun sollen sel1, sel2, sel3 nur übernommen werden, wenn Bedingungen vorher definierter Parameter(hier nehme ich mal einfach Zahlen) erfüllt sind:
___
Prüfe Bedingung sel1 -> wahr, also Übernahme in Code
1<5

Prüfe Bedingung sel2 -> wahr, also KEINE Übernahme in Code
6<5

Prüfe Bedingung sel3 -> wahr, also Übernahme in Code
3<5
--->
model.component("comp1").geom("geom1").feature("uniselZellen").set("input", new String[]{"sel1", "sel3"});


WÜRDE MICH ÜBER HILFE FREUEN, VIELEN DANK IM VORAUS!!!

Ergänzung ()

SaxnPaule schrieb:
So bist du flexibel ohne feste Arraygröße unterwegs und sparst dir eine Variable:
Code:
        int i = 18;
        List<String> selString = new ArrayList<>();
      
        while(selString.size() < i) {
            selString.add("sel" + selString.size());
        }
        model.component("comp1").geom("geom1").feature("uniselZellen").set("input", selString.toArray(new String[0]));
Bei meinem hier drüber geschilderten Problem könnte die nicht feste Arraygröße nützlich sein?!
 
Java:
int count = 3;
String[] selString = IntStream.range(1, count+1)
 .filter(i -> /* Tatsächliche Bedingung hier */ true)
 .mapToObj(i -> "sel"+i)
 .toArray(String[]::new);
 
Zuletzt bearbeitet: (Bedingung war BS.)
H4110 schrieb:
Java:
int count = 3;
String[] selString = IntStream.range(1, count+1)
 .filter(i -> /* Tatsächliche Bedingung hier */ true)
 .mapToObj(i -> "sel"+i)
 .toArray(String[]::new);
Danke für die Antwort!!

Nun habe ich jedoch für "sel1", "sel2", "sel3" unterschiedliche zu überprüfende Bedingungen.
Kann ich das mit Ihrem Code darstellen?

Vielen Dank!
 
Wenn die Parameter für die Bedingung in einer Liste oder einem Array sind, kann man eventuell i als Index verwenden. Ansonsten wird es schwierig, egal bei welcher Form von Schleife.
 
D.h. ich schreibe meine Bedingung für sel1-sel3 einfach in einen Array wie der folgende?
conditions = {'1<5','6<5','3<5'};
Ergänzung ()

Screenshot 2022-05-05 153308.jpg


kriege es bisher nicht ans laufen in matlab..
 
Zuletzt bearbeitet:
Zurück
Oben