Variablen Vereinfachung einer Bedingung

Ocram

Mitglied
Guten tag,

a bis k und Note sind festgelegte short Variablen, kann ich die else if Bedingung kurzer schreiben?
z.B. ohne jedes mal && Note != schreiben zu müssen, sondern alle Variablen zusammenfassen kann.

Mein derzeitiger Code:

else if (Note != a && Note != b && Note != c && Note != d && Note != e && Note != f && Note != g && Note != h && Note != j && Note != k){
System.out.println("ungültige Note");
}

Vielen Dank schon mal im Voraus

Ocram
 
Du kannst das zwar kürzer schreiben, ist aber im Endeffekt deutlich langsamer:

Java:
if (!Arrays.asList(new Short[]{a,b,c,d,e,f,g,h,i,j,k}).contains(Note)) {
    // ungültig
}
 
Also ist meine Methode schon am effektivsten?
und warum wäre das im Endeffekt langsamer?

Danke für die schnelle Antwort!
 
das sind die variablen
short a = 500;
short b = 400;
short c = 370;
short d = 330;
short e = 300;
short f = 270;
short g = 230;
short h = 200;
short i = 170;
short j = 130;
short k = 100;

für Note soll ein beliebiger wert eingesetzt werden, wenn Note nicht einer der variablen ist, soll die Meldung kommen "ungültige Note"
 
du könntest ein short-array aus deinen variablen machen 😉
also

Java:
shot[] notes =  {500, 400, 370, 330, 300, 270, 230, 200, 170, 130, 100};

for (int i = 0; i < notes.length; i++) {
  if (variable != notes[i]) {
    System.err.println("Ungültige Note!");
  }
}

wenn du arrays noch nicht kennst, dann hilft dir vieleicht, das man mit den eckigen Klammern auf die einzelnen Stellen innerhalb des Arrays zugreift 😉
dabei fängt man von 0 an zu zählen😀
 
Java:
public class Notenverteilung {
    public static void main(String[] args) {

    short Note = x;  //x = beliebige Note *100

    short a = 500;
    short b = 400;
    short c = 370;
    short d = 330;
    short e = 300;
    short f = 270;
    short g = 230;
    short h = 200;
    short i = 170;
    short j = 130;
    short k = 100;

        if (Note == a) {
            System.out.println("0 19,5");
        }
        else if (Note == b){
            System.out.println("20 21,5");
        }
        else if (Note == c){
            System.out.println("22 23,5");
        }
        else if (Note == d){
            System.out.println("24 25,5");
        }
        else if (Note == e){
            System.out.println("26 27,5");
        }
        else if (Note == f){
            System.out.println("28 29,5");
        }
        else if (Note == g){
            System.out.println("30 31.5");
        }
        else if (Note == h){
            System.out.println("32 33,5");
        }
        else if (Note == i){
            System.out.println("34 35,5");
        }
        else if (Note == j){
            System.out.println("36 37,5");
        }
        else if (Note == k){
            System.out.println("38 40");
        }
        else if (Note != a && Note != b && Note != c && Note != d && Note != e && Note != f && Note != g && Note != h && Note != j && Note != k){
            System.out.println("ungültige Note");
        }     
    }
}
Das ist mein derzeitiger code leider kenne ich mich nicht so gut mit Arrays aus versteh aber ihr Prinzip, wäre es sinnvoller es mit Arrays zu coden?
 
ahhh mach doch einfach eine switch case anweisung😀

Java:
switch (Note) {
  case a:
    System.out.println("0 19,5"); break;
  case b:
    System.out.println("20 21,5"); break;
  // usw. für deinen lange ausdruck kannst du dann einfach folgendes benutzen:
  default:
    System.out.println("ungültige Note"); break;
}
eins noch, vergiss das break nicht 😉 😀
 
Okay mir ist grade aufgefallen das ich das viel einfacher machen kann -_-
und einfach:

else {
System.out.println("ungueltige Note");
}

statt

elseif(Note != a && Note != b && Note != c && Note != d && Note != e && Note != f && Note != g && Note != h && Note != j && Note != k){
System.out.println("ungültige Note");
}

coden kann
 
Zuletzt bearbeitet:
In diesem Fall ist das letzte "if" (das welches du vereinfachen willst) einfach unnötig.
Verwende einfach nur else ohne if!

Warum:
Durch die ifelseif Konstrukte davor wird schon kontrolliert ob Note gleich eine deiner Variablen ist.
Wenn keiner der vorherigen Blöcke betreten wird, wird automatisch der letzte else (ohne if) Block betreten sofern einer vorhanden ist.
Wird ein if-Block verlassen so ist das ganze if-Else Konstrukt abgearbeitet.

Java:
.....
  else if (Note == j){
  System.out.println("36 37,5");
  }
  else if (Note == k){
  System.out.println("38 40");
  }
  else {
  System.out.println("ungültige Note");
  } 
  }
}

EDIT: Gerade gesehen das du schon selber draufgekommen bist 😉
 
bist du sicher, das dann nicht immer "Unglültige Note" ausgeben wird, sobald die Note nicht gleich "k" ist?
(also auch wenn die Note a oder b oder c usw. ist)
ich kenn mich selber noch nicht so mit java aus, aber ich würde switch case benutzen 😉
 
Also ist meine Methode schon am effektivsten?
und warum wäre das im Endeffekt langsamer?

Um das noch zu beantworten:

Dein Code prüft alle möglichen fälle; dein Code benötigt keinen Zusätzlichen RAM, etc.

In meinem Code wird zuerst ein Array erstellt: new Short[]{a,b,c,d,e,f,g,h,i,j,k,l}
Dann wird daraus eine neue Instanz von java.util.List (wahrscheinlich ArrayList) gemacht: Arrays.asList
Dann wird auch noch über diese Liste iteriert: .contains(Note)

Jeder dieser 3 Schritte benötigt zusätzlichen RAM, der zuerst beim OS angefragt werden muss; das dauert jedes mal seine Zeit. Wenn diese Stelle im Programmablauf nur 1 - 2 mal ausgeführt wird, ist das völlig egal - es gibt keinen Messbaren Unterschied. Wenn diese Stelle aber sehr oft ausgeführt wird (z.B. mehrere 100 mal die Sekunde), dann macht es einen Unterschied wie Tag und Nacht.
 

Neue Themen


Zurück
Oben