Unverständnis für ":" und "?"

Mika34

Bekanntes Mitglied
Hallo an Alle,
Ich melde mich mal wieder zur späten Stunde, weil ich nun beim nächsten Thema bin und dieses mir wieder ein Brett gegen den Kopf haut.
Es geht im Allgemeinen um den Kontrollfuss. Jedoch ist bei dem folgenden Beispiel eine Notation aufgetreten, welche ich so noch nie gesehen habe. Gleichzeitig werde ich aus dem Internet und meinem Lehrbuch einfach nicht schlauer. Der Code lautet:
Java:
public static int c4(final int[] array) {
int count = 0;
for (final int element : array) {
if (element == 4) {
count++;
}
}
return count;
}
Dieser Code soll anscheinend ausgeben, wie oft die 4 in dem übergebenem Array vorkommt. Hätte ich dies lösen müssen, dann hätte ich das über for(int i = 0; i < array.length; i++)
gelöst und nicht über das kryptische ":". Wenn einer mir dieses ":" und das "?" erklären könnte, wäre ich überglücklich.

Beste Grüße
 

Mika34

Bekanntes Mitglied
Wird solch eine Schreibweise eigentlich in der Praxis verwendet oder ist dies mittlerweile veraltet, weil ich konnte mir dadurch den objektorientierten Gedanken dabei nicht erschließen
 
K

kneitzel

Gast
Und das for-each wird nach meiner Erfahrung deutlich öfters verwendet als die Zählschleife. Wobei mein Blick sich vor allem auf der Anwendungsentwickung liegt.
 

httpdigest

Top Contributor
weil ich konnte mir dadurch den objektorientierten Gedanken dabei nicht erschließen
Wo ist denn z.B. der objektorientierte Gedanke bei dem "+" Operator? Oder addierst du `1+2` per `new BigInteger("1").add(new BigInteger("2")).intValue()` ?
Der ternäre Operator ist ein Operator wie jeder andere auch: Er kann in Ausdrücken verwendet werden, um einen Wert zu generieren.
 

LimDul

Top Contributor
Meine persönliche Meinung zum ternären Operator:

- Er ist toll um solche Konstrukte zu vermeiden:

Java:
// Ohne
int i;
if (bedingung) {
  i = 1;
} else {
  i = 2;
}

// Mit:
int i = bedingung ? 1  : 2;
Das ist deutlich kürzer und wenn man sich dran gewöhnt hat, auch gut zu lesen.

Wo ich mich dem ternären Operator verweigere ist, sobald es verschachtelt wird oder der Code hinter dem Fragezeichen so lang wird, dass man die Übersicht verliert. Dann finde ich ihn extrem schwer zu lesen.

Bei den For-Schleifen stimme ich JustNobody vollkommen zu. Die for-each Schleife hat die mit dem Index fast vollständig verdrängt. (Und wird selber teilweise von streams verdrängt). Die Schleife mit Index wird eigentlich nur noch verwendet, wenn die anderen Varianten nicht gehen, weil man z.B. den Index für irgendwelche Berechnungen, Ausgaben etc. braucht
 
X

Xyz1

Gast
Also
a ? b : c;
ist äquivalent zu
if (a) { b } else { c }
wobei man aber dazu sagen muss dass b und c keine "void-Anweisungen" sein dürfen sondern zum Beispiel auch "Rückgabewerte" sein können.
Vergleich https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25 und https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.9 der "Conditional Operator ? :" erwartet einen Ausdruck und das "if Statement" erwartet ein Statement.

Ausdrücke dürfen nicht einfach so ohne Statement stehen,
Java:
		int ii = 0;
		int jj = 1;
		
		ii + jj;
wäre zum Beispiel Nonsense hoch 10.
 
X

Xyz1

Gast
Naja wie immer ist die Wahrheit nicht schwarz oder weiß sondern eher grau. Wer qualitativ guten Code schreibt ist produktiv, hingegen ist aber auch produktiv wer qualitativ schlechten Code schreibt aus der Sicht mancher. Damit geht einher dass eine Menge an Code Zeilen geschrieben wurde welche sich mit einer natürlichen Zahl angeben lässt und welche "von Wirtschaftlern" verstanden werden kann und als Maßgabe für eben jene Produktivität herangezogen werden kann. Andere Kriterien (Konventionen Clean Code best practices Patterns usw.) sind für Wirtschaftler vielleicht nicht so wichtig.
 

httpdigest

Top Contributor
Ich denke, ich lehne mich nicht zu weit aus dem Fenster, wenn ich behaupte, dass kein Entwickler auf der Welt nach Anzahl geschriebener Codezeilen bezahlt wird. Das ist einfach nur schwachsinnig und auch absolut kein Maßstab bzw. keine zuverlässige Kenngröße für den Erfolg eines Unternehmens.
Ein Entwickler, der viel Code schreibt, trägt nicht mehr zum Erfolg eines Unternehmens bei, als ein Entwickler, der wenig Code schreibt.
Das einzig entscheidende ist, wie schnell man mit dem, was man produziert hat, live geht und somit Teil der Wertschöpfungskette wird und es dem Unternehmen so erlaubt, entweder mehr/besser/schneller zu verkaufen bzw. auch interne Geschäftsprozesse günstiger/schneller/zuverlässiger durchzuführen. Time-to-market!
Natürlich hat die Anzahl der Codezeilen hierauf aber einen Einfluss. Wenn viel Code geschrieben wird, dann muss unter Umständen auch viel Code getestet und später viel Code durch sich ständig ändernde Anforderungen refactored/umgeschrieben werden. Wenn überhaupt, dann sollten Entwickler, die wenig Code produzieren, dabei aber schnell mit dem Code live gehen, gut bezahlt werden.
 

White_Fox

Top Contributor
Ich denke, ich lehne mich nicht zu weit aus dem Fenster, wenn ich behaupte, dass kein Entwickler auf der Welt nach Anzahl geschriebener Codezeilen bezahlt wird.
Ich habe zumindest mal von einer Firma gehört, in der die Entwickler angehalten wurden, die obligatorischen 50 LoC/d zu schaffen. Sozusagen als Fleißnachweis. Wer mal (oder mal öfter) weniger schrieb, wurde zum Chef zitiert.

Natürlich ist das völliger Quatsch, wenn ich aber sehe was manche Firmen sonst für Blüten treiben würde es mich wundern, wenn es sowas nicht gäbe.


Wenn überhaupt, dann sollten Entwickler, die wenig Code produzieren, dabei aber schnell mit dem Code live gehen, gut bezahlt werden.
Das ist auch keine gute Idee, ich habe den Verdacht daß das so bei Altium (CAD für Elektronik) gemacht wird. Einerseits führt das zwar zu kleineren Verbesserungen an vielen Stellen (was schön ist, da man während der Arbeit immer wieder kleine angenehme Neuheiten entdeckt). Leider werden größere Dinge dann aber umso seltener angefaßt und Funktionen bleiben lange unfertig.

Altium an sich steckt voller richtig guter Ideen, die aber leider nur halb zu Ende gedacht/umgesetzt sind, und das bleibt dann ziemlich lange so.
 
X

Xyz1

Gast
OMG! (Jahressoll an LoC erfüllt :D)

Zum Anderem, in der Produktion gibt es bei Stückzahlen (welche hergestellt oder verpackt werden, etc.) ja zum Beispiel den Akkordarbeitszuschlag. Das ist aber auch nicht so gut, weil diejenigen, die über einen längeren Zeitraum hinweg wesentlich mehr über der Soll-Stückzahl pro Stunde "liegen" und damit den Akkordarbeitszuschlag locker erreichen, dann von ihren Kolleginnen und Kollegen mindestens einen strafenden Blick kassieren... (das könnte als eine Art Mobbing gelten...)
 

mihe7

Top Contributor
Java:
public class Goldesel {
    public static void main(String[] args) {
        System.out.println(
            "# my_first_calculator.py by AceLewis\n"+
            "# TODO: Make it work for all floating point numbers too\n\n"+
            "if 3/2 == 1:\n"+
            "    input = raw_input\n\n"+
            "print('Welcome to this calculator!')\n" +
            "print('It can add, subtract, multiply and divide whole numbers from 0 to 50')\n"+
            "num1 = int(input('Please choose your first number: '))\n"+
            "sign = input('What do you want to do? +, -, /, or *: ')\n"+
            "num2 = int(input('Please choose your second number: '))\n");

        char[] operators = {'+','-','/','*'};
        for (char op : operators) {
            for (int num1 = 0; num1 <= 50; num1++) {
                for (int num2 = 0; num2 <= 50; num2++) {
                    System.out.printf("if num1 == %d and sign == '%c' and num2 == %d:\n", num1, op, num2);
                    String result = "Inf";
                    switch (op) {
                        case '+': result = "" + (num1+num2); break;
                        case '-': result = "" + (num1-num2); break;
                        case '*': result = "" + (num2*num2); break;
                        case '/': result = num2 == 0 ? "Inf" : Double.toString(num1/(double)num2); break;
                    }
                    System.out.printf("    print(\"%d%c%d = %s\")\n", num1,op,num2,result);
                }
            }
        }
        System.out.println("\nprint(\"Thanks for using this calculator, goodbye :)\")");
    }
}

Code:
$ java -cp . Goldesel | wc -l
20822
--> passt :)

EDIT: Code geändert... printf -> print - Python...
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Ja, du musst nur aufpassen: Jeden Tag nur um einen festen Wert erhöhen. Nicht dass Du ausversehentlich immer verdoppelst oder so - das fällt sonst sehr schnell auf ....

"Was hast Du heute gemacht?"
"Ich habe den Calculator erweitert - er rechnet nun mit Zahlen bis zu 10.350 statt nur bis 10.300 wie gestern ... morgen erweitere ich es dann auf bis zu 10.400."

Gutes Einkommen. Bis Du den Calculator fertig hast (er den Integer Bereich voll abdeckt) hast Du noch genug Arbeit bis zur Rente :)
 

LimDul

Top Contributor
Mal übrigens ganz davon abgesehen, dass LoC sich nicht sinnvoll messen lässt.

Klar, wenn ich komplett neuen Code schreibe, geht das. Aber was ist mit Änderungen? Was ist wenn ich Rahmen einer Änderung alte Zeilen lösche? Was ist wenn ich Zeile mehrfach anfasse? etc.
 
K

kneitzel

Gast
Mal übrigens ganz davon abgesehen, dass LoC sich nicht sinnvoll messen lässt.

Klar, wenn ich komplett neuen Code schreibe, geht das. Aber was ist mit Änderungen? Was ist wenn ich Rahmen einer Änderung alte Zeilen lösche? Was ist wenn ich Zeile mehrfach anfasse? etc.
Wenn Du Zeilen löschst, dann wird Dir das natürlich vom Gehalt abgezogen ....

Also arbeite für mich - da darfst Du dann auch viel Geld mitbringen und mir zahlen :)
 
K

kneitzel

Gast
Das stimmt, man schreibt möglichst immer gleich optimierterten Code. Leider sind Vorgänger oder andere Teammitglieder nicht so einsichtig :D:D:D
Also was meinst Du mit "optimierten Code"? Wenn es bei Optimierung hier auch um Laufzeit gehen sollte, dann wäre meine klare Aussage: "Don't do it" bzw. "Don't do it (yet)".
Siehe z.B. https://clean-code-developer.de/die-grade/roter-grad/#Vorsicht_vor_Optimierungen

Wenn hier optimierter Code lediglich für clean code stehen sollte: Ja, dem stimme ich zu hätte aber andere Worte benutzt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Unverständnis Lamda Expressions Java Basics - Anfänger-Themen 3
Mxxxt Unverständnis bei Summenberechnung Gauß vs. For Java Basics - Anfänger-Themen 2
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Jxhnny.lpz Randomisier für Buttons Java Basics - Anfänger-Themen 13
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
M generate Methode für Streams Java Basics - Anfänger-Themen 6
I Datenmodell für "Tags" Java Basics - Anfänger-Themen 6
Lion.King for-Kontrollstruktur für Pyramide Java Basics - Anfänger-Themen 8
B Mit Countdown Midnestdauer für Teilaufgabenerledigung erzwingen Java Basics - Anfänger-Themen 8
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
javamanoman Java für Online Banking Java Basics - Anfänger-Themen 12
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
I SQL / JPA Query für StartDate und EndDate Java Basics - Anfänger-Themen 1
T getMethode für ein Array Java Basics - Anfänger-Themen 2
Fats Waller Farben mixen für den Hintergrund ? Java Basics - Anfänger-Themen 1
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
N Api nur für Textdatein (.txt) Java Basics - Anfänger-Themen 2
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
E Mittelquadratmethode für Hexadezimalzahlen Java Basics - Anfänger-Themen 1
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
S BubbleSort für ArrayLists Java Basics - Anfänger-Themen 3
T Übungsbuch für Anfänger Java Basics - Anfänger-Themen 3
L Konzept für Quiz Java Basics - Anfänger-Themen 33
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
L loop für Namen Java Basics - Anfänger-Themen 11
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
U BestPractise für Deployment unter Windows gesucht Java Basics - Anfänger-Themen 12
lilrack UML Diagramm für Parkplatzverwaltung Java Basics - Anfänger-Themen 8
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
T Start-Activity für Java Maven Web-Anwendung festlegen Java Basics - Anfänger-Themen 2
T Alternative für switch case Java Basics - Anfänger-Themen 1
P Ressourcen für JSON & API Informationen? Java Basics - Anfänger-Themen 1
M Java Einstellung von Apache POI für MS Word Erstellung mit Eclipse Java Basics - Anfänger-Themen 6
L Compiler-Fehler SupressWarning für clone() Java Basics - Anfänger-Themen 6
P Wie für EIN Java Programm von 64bit Java (=Standard) auf 32bit Java Installation (Windows) umschalten? Java Basics - Anfänger-Themen 6
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
D Ampel für Mitarbeiter zum An-/Abwesend zeigen Java Basics - Anfänger-Themen 28
T Wahrscheinlichkeiten für Slot Machine Java Basics - Anfänger-Themen 13
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
T Roulette für Anfänger Java Basics - Anfänger-Themen 7
A Überprüfung für unentschieden in TicTacToe Java Basics - Anfänger-Themen 10
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben