Problem beim Javaprogrammierung (Anfänger)

G

GTA 3

Guest
Problem beim Javaprogrammierung (Anfänger)

Hi Leute, ich hab ein Problem. Bin im Unterricht eigentlich ganz gut mitgekommen aber wenn ich eine Aufgabe seh und ich eine Methode dazu schreiben soll fühl ich mich so als hätte ich alles wieder vergessen..
Wir sind grad beim Thema Bedingungsschleifen und wenn ich eine Beispiel Aufgabe seh die wir lösen müssen kommt es mir so vor das ich auf einmal alles wieder vergessen habe was wir gelernt haben. Und zwar sollen wir eine Methode( Hier: getGgT ) zum Euklidschen Algorythmus schreiben! Leider habe ich das mit dem Operator while nicht richtig verstanden und ich wollt euch fragen, ob ihr mir einen BeispielQuelltext schreiben könnt und denn mir erklären könnt. Die Grundbasis von Klassen, Objekten und Ausgabe etc. kann ich schon. Die müsst ihr mir nicht erklären!

oder: kennt ihr eine Seite die das sehr gut erklärt ?
 
AW: Problem beim Javaprogrammierung (Anfänger)

while-Schleifen sind mMn sehr einfach zu verstehen.
Dann versuch ichs mal ;)

Code:
while (klasse.variable != "Ich")
{
   if(klasse.random() == 5)
   {
      klasse.variable = "Ich";
   }
   else klasse.variable = "Du";
}

Ist zwar ein sinnloses Beispiel aber nun gut.
die Bedingnung in Klammern hinter dem while drückt aus, wie lange etwas gemacht werden soll. Hier z.B. solange die Variable nicht 5 ist.
Innerhalb der Schleife sollte man dann irgendwas haben was auch mal unterschiedliche Werte in die Variable für die Abbruchbedingung steckt, damit keine Endlosschleife entsteht.
Das ists dann eigentlich schon.

Den euklidischen Algorithmus kennst du? Wenn nicht hier ein Tipp: Modulo-Divisionen geben den Rest zurück (Operator: %)

Dann versuch dich mal und wenn du willst kannst du deinen Code ja posten dann guck ich mal drüber ob er soweit richtig ist ;)

gruß
zcei
 
AW: Problem beim Javaprogrammierung (Anfänger)

Den euklid. Agoryth. kenn ich nicht.. danke ich probiers mal und schreib den Code dann hier auf! :)
 
AW: Problem beim Javaprogrammierung (Anfänger)

So hier mein QT,

public class BedingungsschleifeIII{



public void getggT2(int n, int m){

if(n < 0 && m < 0 && n < m){
System.out.println("FEHLER!!!");

}
else{
int r = (n%m);
while (r<=0){

n = m;
m = r;
r = n%m;
}
System.out.print("Der ggT von " + n + " und " + m + " ist: " + r);
}
}
}

Aber irgendwie funktioniert der QT nicht ganz :

Zwar zeigt es mir dann an das Der ggT von 15 und 6 ist: 3 ist aber wenn ich dann 6:3 eingeb kommt dann diese Fehlermeldung:

java.lang.ArithmeticException: / by zero
at BedingungsschleifeIII.getggT2(BedingungsschleifeIII.java:32)

und ihm Quelltext markiert er mir dann die Stelle wo anscheinend das Problem liegt (im while das r = n%m;)

ach ja der gleiche Fehler kommt auch bei Null obwohl da eigentlich FEHLER!!! herausgegeben werden soll... :wow:

EDIT: vom public void getggT2 nicht iritierren lassen probier noch nach anderen wegen... :)
 
AW: Problem beim Javaprogrammierung (Anfänger)

Also erst einmal würde ich dich bitten deinen Code einzurücken ;)

Und dann hab ich noch fragen ;)

zB warum du am Anfang alles per && überprüfen lässt, warum du nich n und m umdrehst wenn n kleiner m ist und warum r <= 0 die Laufbedingung ist.
 
AW: Problem beim Javaprogrammierung (Anfänger)

Ich ja ich muss es so schreiben, dass es überprüft das die eingegebenen Zahlen größer Null sein sollen wenn nicht dann Ausgabe Fehler! und das n größer ist als m! Und das war eingerückt aber irgendwie wird das hier im Forum automatisch zurück gerückt! :)

EDIT: r <= 0 ups mein fehler sollte eigentlioch r != 0 sein. :)
 
AW: Problem beim Javaprogrammierung (Anfänger)

also bei mir rückt er ein ;)

Was ist denn genau die Zeile 32, denn da scheint ja der Fehler zu liegen

/ by zero ist ein "Division by Zero" Error, heißt, dass versucht wird irgendwas durch 0 zu teilen^^
 
AW: Problem beim Javaprogrammierung (Anfänger)

Ich komm leider nicht drauf wie ich das jetzt beheben soll :(
 
AW: Problem beim Javaprogrammierung (Anfänger)

zcei;2440061[... schrieb:
Was ist denn genau die Zeile 32, denn da scheint ja der Fehler zu liegen
[...]

Wenn du mir das lieferst kann ich dir auch helfen ;) denn meistens kann man den Fehler dann einschränken. Bei dem was du nämlich jetzt hast kommt er nur wenn r = 0 ist, was ja bei <= 0 durchaus passieren kann.

Am besten einfach mal den kompletten nicht funktionierenden Quelltext posten und zeile 32 hervorheben ;)
 
AW: Problem beim Javaprogrammierung (Anfänger)

Also - Division bei Zero bekommst du in deinem Beispiel einfach deswegen, weil der Rest von 6 und 3 = 0 ist und in deiner while-Bedingung

steht (was ja bereits erwähnt wurde).
Wenn du das entsprechend zu

Abänderst bist du auf dem richtigen Weg.

Dann taucht allerdings ein neues (ein mathematisches) Problem auf, denn:

else
{
int r = (n%m); -> int r = (6%3); -> r = 0
while (r!=0) // wird von hier
{
n = m;
m = r;
r = n%m;
} // bis hier komplett übersprungen, da r=0
System.out.print("Der ggT von " + n + " und " + m + " ist: " + r); -> Der ggT von 6 und 3 ist: 0 -> das ist natürlich Quatsch, denn der ggT von 6 und 3 ist bekanntlich 3
}
Was du brauchst ist also ein Zwischenschritt, der dir noch den richtigen Teiler angibt:

else{
int r = (n%m);
while (r<=0){

n = m;
m = r;
r = n%m;
}

if(r = 0)
{
r = m;
}
System.out.print("Der ggT von " + n + " und " + m + " ist: " + r);
}
}
Ich habe es jetzt nicht extra getestet, aber sollte die Müdigkeit mir nicht vollends den Rest gegeben habe, dürfte das die Lösung sein.

MfG
 
AW: Problem beim Javaprogrammierung (Anfänger)

Hallo ich bin es wieder. Ich wiederhol grad ein bischen den Anfangstoff und bin jetzt glaub ich bei einem Anfängerproblem stehen geblieben! Hier erstmal mein Code.

public class BierLied{
public static void main (String[] args){
int bieranzahl = 99;
String wort = "Flaschen";

while(bieranzahl>0){
System.out.println(bieranzahl + " " + wort + " " + "Bier.");
System.out.println("Hol einen raus.");
System.out.println("Und lass sie rumgehen");
bieranzahl--;
if(bieranzahl == 1){
wort = "Flasche";
}
if(bieranzahl>0){
System.out.println(bieranzahl + " " + wort + " Bier im Kühlschrank");
}
else{
System.out.println("Kein Bier im Kühlschrank");
}
}

}
}
Code funktioniert einwandfrei, problem ist nur das er anfängt erst ab 11 Flaschen runterzuzählen obwohl ich den Wert 99 angegeben habe. Wo hackts ?!

MFG
 
Zuletzt bearbeitet:
AW: Problem beim Javaprogrammierung (Anfänger)

Dann müsste es an BlueJ liegen! Der fängt erst ab 11 an aber im Debbuger funktioniert er. Hat sich geklärt! Danke.
 
Zurück