Unterschied zwischen Denkweisen

Sirmeabe

Mitglied
Hallo zusammen,
Wollte mit einer while Schleife die gerade Zahlen zwischen 0 und 20 ausgeben lassen.
Meine Lösung:

Int a = 0;
int b = 0;
while(a<=10){
if((b%2)==0){System.out.println(b);
b = b + 2;
}
a++;
}

Und eine Lösung die ich im Internet gefunden habe.

int a = 0;
int i = 0;
while((a<=10) && ((i%2)==0)) {
System.out.println(i);
a++;
i=i+2;
}

Ist da ein Unterschied? Wenn ja, wo? Welche Lösung würdet ihr bevorzugen?
Viele Grüße
 
Zuletzt bearbeitet:

Staarfightaar

Bekanntes Mitglied
es ist wenig unterschied... man hat halt mehr in eine zeile gestopft

wann soll denn das mal falsch sein ?

falls dein start wert ungerade ist => musst du aufhören
ansonsten => lässt du die while durchlaufen ohne i%2 zu prüfen weil es nicht mehr passieren kann

Java:
public void GeradeZahlenAusgeben(int start,int ende)
if(start%2 != 0 || ende%2 != 0) return;
    while(start < ende)
    {
        System.out.println(start);
        a = a+2;
    }
}
sowas in der art denk ich mir

wenn du objekte noch nicht hattest usw kannst du auch
public static void ...
schreiben, dann kannst du die Methode in deiner Main klasse aufrufen
 
Zuletzt bearbeitet:

Sirmeabe

Mitglied
Vielen Dank für eure Antworten,
Vielleicht habe ich mich nicht richtig ausgedrückt. Ich wollte keine Lösungsvorschläge erhalten. Ich habe gehofft dass mir einer den Unterschied zwischen meiner Denkweise und die der anderen erklären könnte.
Vielen Dank.
 

Sirmeabe

Mitglied
Danke trotzdem für eure Lösungen,
Jetzt ist mir klar dass es auch noch anders zu lösen ist. Ich kenne aber erst nur while und if. Deswegen bin ich damit am üben.
 

mihe7

Top Contributor
Beide "Denkweisen" sind Unsinn.

Fangen wir mal hier an:
Java:
int a = 0;
int b = 0;
while(a<=10){
    if((b%2)==0){
        System.out.println(b);
        b = b + 2;
    }
    a++;
}
Du zählst a von 0 bis inkl. 10. Wenn b ist gerade Zahl ist (und das ist b hier immer), zählst Du zwei drauf. Das if ist völlig überflüssig, genauso wie das a.

Bei Dir würde wenigstens noch a bis zum Ende untersucht, in der zweiten Lösung wird sofort abgebrochen, wenn keine gerade Zahl gefunden wurde.
 

mihe7

Top Contributor
Jetzt ist mir klar dass es auch noch anders zu lösen ist. Ich kenne aber erst nur while und if. Deswegen bin ich damit am üben.
Die for-Schleife kannst Du genauso als while-Schleife schreiben:
Java:
{
    int b = 0;
    while (b <= 20) {
        System.out.println(b);
        b += 2;
    }
}
ist nichts anderes als
Java:
for (int b = 0; b <= 20; b+= 2) {
    System.out.println(b);
}
 

KonradN

Super-Moderator
Mitarbeiter
Also bei den Denkweisen Unterschiede heraus zu suchen ist erst einmal nicht wiklich zielführend.

Die Denkweise bei Deinen beiden Lösungen entspricht in etwa dem Vorgehen: "Du kaufst Dir ein Seil um Dich damit so doll zu erschiessen, dass die Messerspitze hinten heraus schaut." - und nun willst Du diskutieren, ob dazu ein Seil aus Kunststoff oder doch besser ein Hanf sein zu nutzen ist....

Warum verkomplizierst Du dalles so sehr? Die Aufgabe ist doch erst einmal deutlich und einfach:
Wollte mit einer while Schleife die gerade Zahlen zwischen 0 und 20 ausgeben lassen.

Bei so einer Aufgabe frage ich Dich jetzt:
- Wo siehst Du ein a und b? Die Namen sagen absolut nichts aus. Was besagt denn die Aufgabe? Die spricht von geraden Zahlen. Also hast Du eine Variable Zahl oder geradeZahl.
- Wo siehst Du in der Aufgabe eine 10? Das ist wie in dem Vergleich: Du willst Dich eschiessen? Wozu brauchst Du ein Seil? Warum soll dann eine Messerspitze hinten raus schauen? Davon steht da nichts, also wird da sowas in der Lösung auch bitte NIE vorkommen.

Das sind Dinge, auf die sollte man immer achten - von Anfang an!

Und dann ist Die Lösung immer gradlinig:
zahl = Anfangswert
Solange zahl <= Endwert ist:
- Wenn zahl gerade ist, dann gib diese aus.
- Erhöhe zahl.

Also ein:
Java:
zahl = 0;
while (zahl <= 20) {
    if (zahl % 2 == 0) System.out.println(zahl);
    zahl++;
}

Oder wenn Du durchschaust, dass die geraden zahlen immer ein +2 bedeutet, dann wird daraus ein:
geradeZahl := Erste Gerade Zahl ab Anfangswert
So lange geradeZahl <= Endwert ist:
- gib geradeZahl aus
- geradeZahl um 2 erhöhen

Java:
geradeZahl = 0;
while (geradeZahl <= 20) {
    System.out.println(geradeZahl);
    geradeZahl += 2;
}

Die Aufgabe war also recht deutlich. Komplexer wäre es, wenn die Aufgabenstellung anders formuliert worden wäre. Die Lösung von euch besagt eher etwas wie:
Berechne die ersten n geraden Zahlen ab 0.
Dann hast Du neben der geradenZahl auch noch eine Anzahl - also kommst Du auf so eine Lösung, wie ihr sie da erstellt habt.

Ich hoffe es wird deutlich, dass es nicht komplizierter wird sondern einfacher! Aufgaben (Anforderungen) werden einfach und geradlinig umgesetzt (So diese vrnünftig formuliert sind - also kein "Kauf Dir ein Seil und erschiess Dich damit so dass die Messerspitze hinten raus schaut" - das ist natürlich eine Grundvoraussetzung.)
-> Vernünftige Bezeichner - so behältst Du selbst den Überblick. Wie willst Du bei etwas komplexerem Code sonst bei einem a++ wissen, ob dies richtig ist oder ob da nicht ein b++ ist? Oder ob das ++ nicht eher ein erhöhen um 2 sein müsste. (Daher auch bei den Lösungen einmal ein geradeZahl. Bei geradeZahl++ sieht man sofort, dass da etwas falsch sein muss. Oder eine prüfung: geradeZahl % 2 == 0 wmacht kein Sinn, denn es ist ja bereits eine gerade Zahl. Das würde also nur als Checks einen Sinn ergeben also z.B. bei einem Parameter, der übergeben wird, mache ich eine Validierung um ggf. den Aufrufer zu "verhauen" :) )
-> Anforderungen einfach und geradlinig implementieren (KISS - Keep It Simple, Stupid)

Oder um die Worte von Grady Booch zu nutzen:
Clean code is simple and direct.
Clean code reads like well-written prose.
Clean code never obscures the designer’s intent but rather is full of crisp abstractions and straightforward lines of control.

Das bitte als Anregung verstehen für zukünftigen Code. Niemand erwartet, dass Anfänger Clean Code am Anfang meistern (Damit wird man erst später gequält) aber es ist so existenziell, so dass man es immer wieder vor Augen geführt bekommen sollte. Daher das nur als eine Abhandlung, die Dein Beispiel einmal aufgreift.

Und ganz wichtig: Das geht in keiner Weise gegen Dich oder Deine Position. Es geht nur um den Code. Du bist ganz am Anfang und Ziel von diesem Beitrag soll nicht sein, die da jeden Spass zu verderben sondern genau das Gegenteil: Eine Grundlage zu schaffen, damit Du Spaß an der Sache haben kannst!

Edit: Den Code mit der ganzenZahl++; noch direkt angepasst. Danke für den Hinweis @temi
 
Zuletzt bearbeitet:

temi

Top Contributor
Oder wenn Du durchschaust, dass die geraden zahlen immer ein +2 bedeutet, dann wird daraus ein:
geradeZahl := Erste Gerade Zahl ab Anfangswert
So lange geradeZahl <= Endwert ist:
- gib geradeZahl aus
- geradeZahl um 2 erhöhen
Java:
geradeZahl = 0;
while (geradeZahl <= 20) {
    System.out.println(geradeZahl);
    geradeZahl += 2; // Zahl um 2 erhöhen
}

Da war ein kleiner, aber entscheidender, (Flüchtigkeits-) Fehler...
 

KonradN

Super-Moderator
Mitarbeiter
Java:
geradeZahl = 0;
while (geradeZahl <= 20) {
    System.out.println(geradeZahl);
    geradeZahl += 2; // Zahl um 2 erhöhen
}

Da war ein kleiner, aber entscheidender, (Flüchtigkeits-) Fehler...
Ja, klar. Im Text schreibe ich auch noch, dass man nur so ein Statement sehen muss, um zu sehen, dass es falsch ist. :) Wenn man im Forum per Copy & Paste sowas macht - ich hatte den Code-Block des ersten Beispiels nur kopiert und dann diese Stelle klar vergessen.

Danke für den schnellen Hinweis - konnte ich direkt noch editieren.
 

Neumi5694

Top Contributor
Die beste Lösung ist meines Erachtens die, deren Sinn man 7 Jahre später beim Lesen am einfachsten erkennt.
Dabei hilft, für ein einfaches Problem keine komplexen Abfragen zu verwenden.

Ich würde mihe's for-schleife wegen ihrer Schlichtheit bevorzugen und weil sie ohne externe (außerhalb der Schleife sichtbare) Variablen auskommt.


Wenn du hier aber eine gekapselte Funktion schreibst, die du nie wieder anfassen wirst, dann ist es vollkommen wurscht, was du machst, so lange das richtige Ergebnis rauskommt.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Bezüglich der beiden Varianten evtl. noch eine Bemerkung zu dem Unterschied:

a) while (bed1 && bed2) { ... }
b) while (bed1) { if (bed2) { ...} ... }

Der Code macht unterschiedliches: In der ersten Variante bricht die Schleife komplett ab, wenn bed2 einmal nicht mehr zutrifft. Bei der zweiten Variante läuft die Schleife weiter - es wird dann nur eben das, was im if steht, nicht ausgeführt.

Bei deinem Code spielt es aber keine Rolle, denn die Bedingung ist immer wahr und könnte ersatzlos gestrichen werden. Daher machen beide Varianten das Gleiche und beide Varianten haben unnötige Checks und sind unnötig komplex.
 

Sirmeabe

Mitglied
Guten Abend,

vielen Dank für eure Antworten. In der Tat habe ich da ziemlich zu viel überlegt wie man das lösen kann.
Einfacher wäre es gewesen: von 0 nach 20 hochzuzählen in 2 er Schritten. Darauf bin ich vorher nicht draufgekommen.
Cooles Beispiel mit dem Erschießen. Hat mich wirklich amüsiert.
Werde demnächst die Aufgabenstellungen aufmerksamer lesen müssen.
 

Hag2bard

Bekanntes Mitglied
So ging es mir am Anfang mit dem ausgeben von Primzahlen. Da hatte ich mehrere Schleifen ineinander und mehrere if Bedingungen.
Letztendlich muss man nur wissen wie eine Primzahl definiert ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
L Unterschied zwischen Klassen - und Instanzvarbiablen Java Basics - Anfänger-Themen 1
M Unterschied zwischen Classpath eines Eclipse Projektes und dem CLASSPATH? Java Basics - Anfänger-Themen 3
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
A Exakte Unterschied zwischen Java EE und Java SE? Java Basics - Anfänger-Themen 4
J Unterschied zwischen statische und nicht statische Methoden? Java Basics - Anfänger-Themen 14
O Java unterschied zwischen Interface und Interface_Referenzen!!?? Java Basics - Anfänger-Themen 7
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
B Unterschied zwischen String & char Array? Java Basics - Anfänger-Themen 5
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
B Variablen: unterschied zwischen Klassen und Instanzvariable Java Basics - Anfänger-Themen 2
H Unterschied zwischen 2 Date in Sekunden am einfachsten? Java Basics - Anfänger-Themen 5
tanja Der Unterschied Zwischen Arrays in Java und ADA Java Basics - Anfänger-Themen 11
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3
V Unterschied zwischen J2EE und JEE ?? Java Basics - Anfänger-Themen 1
N Was ist der Unterschied zwischen ArrayList und Vector? Java Basics - Anfänger-Themen 3
A Unterschied zwischen Checked und unchecked Exception Java Basics - Anfänger-Themen 3
C Unterschied zwischen Polymorphie und Typcasting Java Basics - Anfänger-Themen 10
G Unterschied zwischen den Datenstrukturen Java Basics - Anfänger-Themen 2
M Unterschied zwischen . Compiler und JIT-Compiler,Hotspot-VM Java Basics - Anfänger-Themen 2
C Unterschied zwischen ArrayList und Vector Java Basics - Anfänger-Themen 2
I_Oscuridad Unterschied zwischen Objektorientiert und prozedural ? Java Basics - Anfänger-Themen 8
G Was ist der unterschied zwischen return und ? Java Basics - Anfänger-Themen 3
G Unterschied zwischen Java 2 bis 6 Java Basics - Anfänger-Themen 12
G Unterschied zwischen SwingWorker und "normalem" Th Java Basics - Anfänger-Themen 3
J Unterschied zwischen 2 Grafik Methoden Java Basics - Anfänger-Themen 2
G unterschied zwischen in.read() und in.read(byte [] b, int. Java Basics - Anfänger-Themen 3
G Unterschied zwischen SQL Timestamp und Java Java Basics - Anfänger-Themen 2
A Unterschied zwischen HashMap und Hashtable Java Basics - Anfänger-Themen 20
G Unterschied zwischen Assoziation, Aggregation u. Komposition Java Basics - Anfänger-Themen 7
G Unterschied zwischen & und && Java Basics - Anfänger-Themen 1
G Unterschied zwischen Ant und Maven Java Basics - Anfänger-Themen 9
K Unterschied zwischen Color.white und Color.WHITE? Java Basics - Anfänger-Themen 4
A Unterschied zwischen String & Stringbuffer! Java Basics - Anfänger-Themen 14
O Unterschied zwischen static und public Java Basics - Anfänger-Themen 2
G Was ist der Unterschied zwischen length und length()? Java Basics - Anfänger-Themen 7
N Unterschied zwischen Beans finden Java Basics - Anfänger-Themen 2
L Unterschied zwischen Objekten, Arrays und Strings Java Basics - Anfänger-Themen 2
G Unterschied zwischen Integer und int in java Java Basics - Anfänger-Themen 8
C Unterschied zwischen, Applet, Java und JavaScript Java Basics - Anfänger-Themen 3
K gibt es einen unterschied zwischen .JAVA und .java ? Java Basics - Anfänger-Themen 4
ven000m Unterschied zwischen: ADT & generischer Programmierung Java Basics - Anfänger-Themen 2
H Unterschied zwischen Stack und Array Java Basics - Anfänger-Themen 3
M Unterschied zwischen J2SE 5.0 Update x und J2SE 1.4.x Java Basics - Anfänger-Themen 4
C Unterschied zwischen equals und == ? Java Basics - Anfänger-Themen 6
D Unterschied zwischen Referenz auf Objekt/Instanz von Objekt Java Basics - Anfänger-Themen 9
G verstehe den unterschied zwischen equals und == nicht Java Basics - Anfänger-Themen 3
P Unterschied zwischen Interface und Vererbung und Sinn? Java Basics - Anfänger-Themen 5
M Unterschied zwischen J2SE, JSEE und JDK Java Basics - Anfänger-Themen 8
R Unterschied zwischen a++ und ++a Java Basics - Anfänger-Themen 9
G Unterschied zwischen homogenen und heterogenen Liste Java Basics - Anfänger-Themen 9
D Unterschied zwischen Ziffer und Zahl Java Basics - Anfänger-Themen 9
R Unterschied zwischen Integer und int Java Basics - Anfänger-Themen 6
B Was ist der Unterschied zwischen .java- und .class Dateien Java Basics - Anfänger-Themen 3
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
P Unterschied Installation von zipped JDK vs Installer-JDK (auf Windows)? Java Basics - Anfänger-Themen 2
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
K Unterschied Information Hiding und Kapselung? Java Basics - Anfänger-Themen 2
G Methoden wo ist der Unterschied?? Java Basics - Anfänger-Themen 11
D Unterschied charAt() substr() Java Basics - Anfänger-Themen 3
D Unterschied == und equals in Arrays Java Basics - Anfänger-Themen 2
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
H .jar unterschied .class Java Basics - Anfänger-Themen 3
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
K Unterschied for-Schleife Java Basics - Anfänger-Themen 14
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
H Unterschied BufferedReader und BufferedInputStream Java Basics - Anfänger-Themen 4
N Unterschied von Post- und Preinkrement Java Basics - Anfänger-Themen 3
T Unterschied dynamischer und statischer Laufzeittyp Java Basics - Anfänger-Themen 1
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
V Unterschied x++ und x=x++ Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
A Klassen Unterschied Warteschlange, Stapel und Liste Java Basics - Anfänger-Themen 3
M Wo liegt der Unterschied? Deklaration Klasse oder Konstruktur Java Basics - Anfänger-Themen 3
S Unterschied print() und println() Java Basics - Anfänger-Themen 3
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
S Datentypen Unterschied elementare und zusammengesetzte/strukturierte Datentypen Java Basics - Anfänger-Themen 5
S Unterschied Ausführung in IDE <-> Befehlszeile Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben