Arrayauswahl über Case-Anweisung

Status
Nicht offen für weitere Antworten.

tommiwe

Mitglied
Hallo!

Ich habe mehrere Arrays mit unterschiedlichen Zahlen. Je nach Auswahl aus einer ComboBox soll ein anderes Array für eine Berechnung gewählt werden. Hier habe ich aber noch einen Fehler. Es wird zwar aus der ComboBox der richtige Wert ermittelt und dieser auch verwendet. Aber eben nur das erste Element.
Lt. meinem Code auch kein Wunder. Aber wie muss in den ändern, damit er nicht ein Element aus dem Array wählt, sondern das richtige Array und dann in der Berechnung alle Elemente des ausgewählten Arrays?

Code:
n = jCBJaehrlichkeit.getSelectedIndex();
        
        switch (n)
        {
            case 0: rn = Rn05[i]; break;
            case 1: rn = Rn1[i]; break;
            case 2: rn = Rn2[i]; break;
            case 3: rn = Rn5[i]; break;
            case 4: rn = Rn10[i]; break;
            case 5: rn = Rn20[i]; break;
            case 6: rn = Rn50[i]; break;
            case 7: rn = Rn100[i]; break;
            
            default: rn = Rn5[i];
        }
        
         for (int i = 0; i < Dmin.length; i++) {
            double d = Dmin[i];
            //double rn = Rn05[i];
            Vsu = (rn - qDru) * d * fz *fA * Umrechnung;
            if(Vsu >= Vsumax) {
               Vsumax = Vsu;
                index = i;
            }
            else Vsu = Vsumax; 
        }
 

0x7F800000

Top Contributor
was auch immer du da tust, das hier:
Code:
case 0: rn = Rn05[i]; break;
            case 1: rn = Rn1[i]; break;
            case 2: rn = Rn2[i]; break;
            case 3: rn = Rn5[i]; break;
            case 4: rn = Rn10[i]; break;
            case 5: rn = Rn20[i]; break;
            case 6: rn = Rn50[i]; break;
            case 7: rn = Rn100[i]; break;
sieht abartigst eklig aus. Verwende einfach ein zweidimensionales array, und lass dieses ganze herumgeswitche weg. :toll:
 

tommiwe

Mitglied
Das habe ich noch nicht verstanden. Mein Array besteht jeweils aus 10 Zahlen, die innerhalb einer Schleife in einer Formel verwendet werden. Es gibt 8 verschiedene Arrays zur Auswahl mit jeweils unterschiedlichen Zahlen.
Über eine if-Anweisung muss doch erstmal geprüft werden, welches Array genommen werden soll, um dann mit dem Zahlen aus diesem Array zu rechnen.
Wie soll ich das über ein zweidimensionales Array machen?
 

0x7F800000

Top Contributor
tommiwe hat gesagt.:
Über eine if-Anweisung muss doch erstmal geprüft werden, welches Array genommen werden soll, um dann mit dem Zahlen aus diesem Array zu rechnen.
welche if-anweisung? if anweisung ist dazu da, um irgendwelche sinnvollen Fälle zu unterscheiden. Bisher sehe ich nur eine monströse sinnfreie case-verzweigung, bei der du stumpfsinnig die zahlen 0-7 runtergeschrieben hast.

mach' doch direkt mit nem 2d-array:
statt diesem ganzen krempel:
Code:
n = jCBJaehrlichkeit.getSelectedIndex();
       
        switch (n)
        {
            case 0: rn = Rn05[i]; break;
            case 1: rn = Rn1[i]; break;
            case 2: rn = Rn2[i]; break;
            case 3: rn = Rn5[i]; break;
            case 4: rn = Rn10[i]; break;
            case 5: rn = Rn20[i]; break;
            case 6: rn = Rn50[i]; break;
            case 7: rn = Rn100[i]; break;
           
            default: rn = Rn5[i];
        }
steht dann nur noch:
Code:
rn=Rn[jCBJaehrlichkeit.getSelectedIndex()][i];
da. Ist doch schon wesentlich angenehmer zu tippen, findest du nicht?

Außerdem würde ich dir empfehler, den bezeichnern irgendwelche sinnvollere namen zu geben. "rn" "Rn" "n" klingen ziemlich nichtssagend und sind rein optisch schwer auseinanderzuhalten.
 

tommiwe

Mitglied
Hi!

Ja, das sieht schon nett aus. Und ist wahrlich überschaulicher, aber es funzt nicht, da Rn als Teil einer Arraybezeichnung steht. Und bei Deiner Variante wird Rn als Variable angesehen, die noch nicht definiert wurde.
Ich glaube, ich poste einfach nochmal die Arrays. Vielleicht wird es dann verständlicher. Auf jeden Fall kriege ich es mit Deinem Vorschlag noch nicht umgesetzt.

Code:
    double Rn05[] = {177.6, 109.6, 82.5, 67.4, 50.7, 38, 31, 23.2, 18.8, 14.1, 11.4, 8.5, 6.3, 5.1, 3.5, 2.8, 1.8, 1.4};
    double Rn1[] = {234.3, 148.6, 113.9, 94.3, 72.2, 55.4, 45.8, 33.5, 26.8, 19.6, 15.7, 11.5, 8.4, 6.7, 4.7, 3.8, 2.5, 1.7};
    double Rn2[] = {291, 187.7, 145.2, 121.1, 93.8, 72.7, 60.7, 43.8, 34.8, 25.2, 20, 14.5, 10.5, 8.3, 5.9, 4.8, 3.1, 2.1};
    double Rn5[] = {366, 239.2, 186.7, 156.6, 122.3, 95.6, 80.3, 57.5, 45.3, 32.5, 25.7, 18.4, 13.2, 10.4, 7.5, 6.1, 4, 2.6};
    double Rn10[] = {422.7, 278.3, 218.1, 183.5, 143.9, 112.9, 95.1, 67.8, 53.3, 38, 29.9, 21.4, 15.3, 12, 8.7, 7.1, 4.7, 3};
    double Rn20[] = {479.4, 317.3, 249.4, 210.3, 165.5, 130.3, 110, 78.1, 61.3, 43.6, 34.2, 24.4, 17.3, 13.6, 9.9, 8.1, 5.4, 3.4};
    double Rn50[] = {554.4, 368.9, 290.9, 245.8, 194, 153.2, 129.6, 91.8, 71.8, 50.9, 39.9, 28.3, 20.1, 15.8, 11.5, 9.4, 6.3, 3.9};
    double Rn100[] = {611.2, 407.9, 322.2, 272.7, 215.6, 170.5, 144.4, 102.1, 79.8, 56.5, 44.2, 31.3, 22.2, 17.4, 12.7, 10.4, 6.9, 4.2};

Zum Testen ist das auch erst mal eine pure Zahlenaufreihung. Wenn alles läuft, will ich mich daran machen, diese einzelnen Arrays aus Textdateien füllen zu lassen.

Die Variablenbezeichnungen sind für mich schon sprechend. Ich habe bei der Variablendeklaration aber nochmal beschrieben, was sie bedeuten. Die Variablen werden in Formeln in meinem Fachbereich verwendet und sind dort auch bekannt.
 
M

maki

Gast
Suche mal nach Strategy Pattern.

Die Variablenbezeichnungen sind für mich schon sprechend. Ich habe bei der Variablendeklaration aber nochmal beschrieben, was sie bedeuten. Die Variablen werden in Formeln in meinem Fachbereich verwendet und sind dort auch bekannt.
Kommentare mitten im Quellltext sind ein gutes Zeichen dafür, das der Code "stinkt".
Stinkender Code sollte "Refactored" werden, sprechende Variablennamen bringen viel und kosten nix.
 

0x7F800000

Top Contributor
maki hat gesagt.:
Suche mal nach Strategy Pattern
@maki: warte bitte noch ein bisschen mit den großen geschützen. Ich versuch dem kollegen hier schon seit zwei Stunden zu erklären, dass arrays toll sind, und der will's mir nicht glauben, was soll er dann machen, wenn er "pattern" hört? flucht ergreifen^^

@OP:
Wenn alles läuft, will ich mich daran machen, diese einzelnen Arrays aus Textdateien füllen zu lassen.
Lass mal raten, das einlesen von dateien wolltest du doch sicherlich auch siebzig mal manuell hinschreiben, oder? -.-

Code:
    double Rn05[] = {177.6, 109.6, 82.5, 67.4, 50.7, 38, 31, 23.2, 18.8, 14.1, 11.4, 8.5, 6.3, 5.1, 3.5, 2.8, 1.8, 1.4};
    double Rn1[] = {234.3, 148.6, 113.9, 94.3, 72.2, 55.4, 45.8, 33.5, 26.8, 19.6, 15.7, 11.5, 8.4, 6.7, 4.7, 3.8, 2.5, 1.7};
    double Rn2[] = {291, 187.7, 145.2, 121.1, 93.8, 72.7, 60.7, 43.8, 34.8, 25.2, 20, 14.5, 10.5, 8.3, 5.9, 4.8, 3.1, 2.1};
    double Rn5[] = {366, 239.2, 186.7, 156.6, 122.3, 95.6, 80.3, 57.5, 45.3, 32.5, 25.7, 18.4, 13.2, 10.4, 7.5, 6.1, 4, 2.6};
    double Rn10[] = {422.7, 278.3, 218.1, 183.5, 143.9, 112.9, 95.1, 67.8, 53.3, 38, 29.9, 21.4, 15.3, 12, 8.7, 7.1, 4.7, 3};
    double Rn20[] = {479.4, 317.3, 249.4, 210.3, 165.5, 130.3, 110, 78.1, 61.3, 43.6, 34.2, 24.4, 17.3, 13.6, 9.9, 8.1, 5.4, 3.4};
    double Rn50[] = {554.4, 368.9, 290.9, 245.8, 194, 153.2, 129.6, 91.8, 71.8, 50.9, 39.9, 28.3, 20.1, 15.8, 11.5, 9.4, 6.3, 3.9};
    double Rn100[] = {611.2, 407.9, 322.2, 272.7, 215.6, 170.5, 144.4, 102.1, 79.8, 56.5, 44.2, 31.3, 22.2, 17.4, 12.7, 10.4, 6.9, 4.2}
Variablennamen? Mit drangehängten indizes?

Also, merk dir bitte, folgender code:
Code:
double a1, a2, a3, ... , a23;
sollte bei dir ab jetzt etwa dieselben assoziationen auslösen wie
massenmord, hirnkrebs, nuklearer holocaust
Okay?

Deswegen machst du diese ganzen "RnXYZ"-Kram ganz schnell weg, und schreibst das alles schön sauber in ein array hin:
Code:
double[][] Rn =new double[][]{
  new double[]{177.6, 109.6, 82.5, 67.4, 50.7, 38, 31, 23.2, 18.8, 14.1, 11.4},
  new double[]{234.3, 148.6, 113.9, 94.3, 72.2, 55.4, 45.8, 33.5, 26.8, 19.6},
  .
  .
  .
  new double[]{611.2, 407.9, 322.2, 272.7, 215.6, 170.5, 144.4, 102.1, 79.8}
};
 

0x7F800000

Top Contributor
Anscheinend darfst du das sogar so hinschreiben.
Code:
double[][] Rn ={
  {177.6, 109.6, 82.5, 67.4, 50.7, 38, 31, 23.2, 18.8, 14.1, 11.4},
  {234.3, 148.6, 113.9, 94.3, 72.2, 55.4, 45.8, 33.5, 26.8, 19.6},
  .
  .
  .
  {611.2, 407.9, 322.2, 272.7, 215.6, 170.5, 144.4, 102.1, 79.8}
};
(was mir allerdings irgendwie neu zu sein scheint) War das denn früher auch so? ???:L ist afair eine neuerfindung, hab doch extra zehn mal nachgeschaut, ob's geht... Naja, jedes mal den Typ hinzuschreiben ist imho irgendwie einheitlicher. Wenn man das nicht bei der deklaration macht sondern mitten im code, dann weiß man unter umständen gar nicht mehr, was das für ein tier sein soll...
 

0x7F800000

Top Contributor
SlaterB hat gesagt.:
Klingt überzeugend ;)
Holy fucking crap, ich hab's tatsächlich geschafft, diese hübsche simple schreibweise jahrelang zugunsten der einheitlichkeit zu übersehen :) Naja, man soll ja nie aufhören zu lernen.
 

tommiwe

Mitglied
Hallo Andrey!

Danke. Ich denke, ich hab's jetzt verstanden und werde mir diese und die anderen Anregungen zur Variablendeklaration zu Herzen nehmen. Nun ja, ich fange halt gerade an.
 

0x7F800000

Top Contributor
tommiwe hat gesagt.:
Hallo Andrey!

Danke. Ich denke, ich hab's jetzt verstanden und werde mir diese und die anderen Anregungen zur Variablendeklaration zu Herzen nehmen. Nun ja, ich fange halt gerade an.
Joah^^
Hast du das jetzt hinbekommen, oder gehst du vielleciht in die defensive, weil du dich von diesem ganzen geschwätz über den nuklearen butterkeks abgeschreckt fühlst ;) ? Nicht so ernst nehmen was ich da schreibe, ich labere dauernd irgendwelchen Müll :p schon klar dass du grad erst anfängst :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen GlassPane über JScrollPane legen Java Basics - Anfänger-Themen 6
A Server - Client Nachrichtenaustausch über Eventbus Java Basics - Anfänger-Themen 12
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
B großzügiges Pixelraster über Bildschirm legen Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
S Java über SSH Java Basics - Anfänger-Themen 13
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
W char über die Konsole? Java Basics - Anfänger-Themen 7
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
A Array Ansprache einer Zelle über Punktnotation? Java Basics - Anfänger-Themen 3
O Java über cmd benutzen ? Java Basics - Anfänger-Themen 5
J Variablenzugriff über string Java Basics - Anfänger-Themen 18
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
M Java Kompilieren über Package grenzen hinaus Java Basics - Anfänger-Themen 4
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Addition von Arrays über die Parameterliste Java Basics - Anfänger-Themen 11
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
T DoWhile Schleife über mehrere Mothoden Java Basics - Anfänger-Themen 5
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Iterieren über eine CSV Datei Java Basics - Anfänger-Themen 7
I GUI über Eclipse oder NetBeans Java Basics - Anfänger-Themen 23
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
O Methode über Leerzeichen Java Basics - Anfänger-Themen 13
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
J MySQL Datumsabfrage über ResultSet in Java-Servlet Java Basics - Anfänger-Themen 4
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
G Arraynamen über eine Schleife ansprechen Java Basics - Anfänger-Themen 4
S Bild über JButton legen Java Basics - Anfänger-Themen 3
temi Druckeransteuerung über ESC-Sequenz Java Basics - Anfänger-Themen 21
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
P Threads Prozess kann nicht über die GUI gestartet werden Java Basics - Anfänger-Themen 8
T CMD über Java-Programm aufrufen Java Basics - Anfänger-Themen 2
X Finde die Files über FTP nicht Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
P Programm kann über CMD nicht ausgeführt werden Java Basics - Anfänger-Themen 2
E Frage über Speichern und Ausgabe Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
X Betriebssytem interne Consolen Commands über Java starten Java Basics - Anfänger-Themen 2
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
A .jar über Webbrowser aufrufen Java Basics - Anfänger-Themen 2
D Ausgabe über JLabel Java Basics - Anfänger-Themen 12
L Erste Schritte Arrays über eine for Schleife ansprechen. Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
K Objekt soll Anwendung über Änderungen informieren Java Basics - Anfänger-Themen 8
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
F Gewichteter Mittelwert über eine Zeitperiode Java Basics - Anfänger-Themen 3
B Schleife über einen Container Java Basics - Anfänger-Themen 7
Henri Paare Frage über Java Programmierung Java Basics - Anfänger-Themen 10
T jar von stick aus über jre auf stick starten Java Basics - Anfänger-Themen 6
L Iterieren über ArrayList Java Basics - Anfänger-Themen 1
D Java doppelte Zahlen auch über 10 in einem String entfernen Java Basics - Anfänger-Themen 2
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0
F Methoden aus anderer classe über nehmen Java Basics - Anfänger-Themen 10
N .propertiesdatei über Relativen Pfad einlesen lassen Java Basics - Anfänger-Themen 5
G Input/Output CSV-Datei über Java-Programm erstellen, Zeichensalat Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben