Hey, kann mir jemand sagen, warum das Programm sich zwar compilieren lässt und auch K,p und n nachfragt, aber sich dann aufhängt und nicht K ausgibt? weiss wirklich nicht mehr weiter.
PS: ich weiss, ungewöhnliche methode ne potenz auszurechnen, aber mehr hatten wir im kurs noch nicht.
Code:
import AlgoTools.IO;
public class Kapital{
public static void main(String [] argv) {
int a,b,c,d,e,K,n,p,q;
K=IO.readInt("Bitte den Betrag des Anfangskapitals eingeben");
n=IO.readInt("Bitte den Zinssatz eingeben");
p=IO.readInt("Bitte die Laufzeit in Jahren eingeben");
q=1;
b=0;
d=100;
e=d;
a=(100+p);
c=a;
while (q==1){
do {
a=a*c;
d=d*e;
b=(b++);
} while (b <= n);
K=((K*a)/d);
IO.println(K);
q=IO.readInt("Fortfahren?");
}
while (q==0) {
IO.println("Ende");
}
}
}
Bitte gewöhn dir als erstes an, die Exceptions mit in den Thread zu posten.
Was soll den bitte diese Zeile machen?
Code:
while (q==0) {
IO.println("Ende");}
Sobald der Compiler an diese Stelle kommt, passiert entweder gar nichts (q is nicht 0) oder es wird unendlich oft "Ende" ausgegeben (q ist 0). Wahrscheinlich wolltest du da ein if hinschreiben statt ein while^^
public class Test
{
public static void main(String[] args)
throws Exception
{
int b = 4;
int c = 4;
for (int i = 0; i < 10; i++)
{
b = (b++);
c = c + 1;
System.out.println("b: " + b + ", c: " + c);
}
}
}
int b = 0;
b = b++;
System.out.println(b); //gibt 0 aus
Soll heißen, dein b zählt nicht hoch. Nimm einfach nur b++, dann funktioniert es.
Warum deine Version nicht funktioniert, ist schwer zu erklären. Was sicher ist, ist das b++ erst den alten Wert zurückliefert, und dann erst die Variable um eins erhöht. Der erhöhte Wert wird dann durch die Zuweisung des alten Werts wieder überschrieben (so stelle ich mir das jedenfalls vor).
Schandro hat natürlich auch Recht, die while-Schleife ist ziemlich zweckfrei, du willst wahrscheinlich sowas:
ja, die while schleife ist noch "baustelle" es ging mir im moment nur darum, warum er das k nicht ausgibt, aber wenn er das b nicht erhöht isses natürlich klar, dann gibts da ne endlosschleife.
@slater: ganz ehrlich, keine ahnung was dein vorcshlag bezweckt...^^
vllt zum besseren verständnis: die formel (k*(100+p)^n)/(100^n) soll ausgerechnet werden, dann gibts in der aufgabe noch n paar sachen wegen der terminierung(deswegen das "q") usw, aber die sind erstmal nebnsächlich.
einfach das b auf 1 swtzen und dann müsste es gehen bis zum K, gell? kanns gerad net ausprobieren.
Aber so oder so schonmal richtig dickes dankeschön an alle!!! ^^
Es geht einfach nicht. habs jetzt nochmal anders geschrieben
Code:
import AlgoTools.IO;
public class test1 {
public static void main (String [] argv) {
int K = IO.readInt("Kapital");
int p = IO.readInt("Prozent");
int n = IO.readInt("Jahre");
int c = K;
int a,b,d;
a = 100;
b = 1;
while (b <= n) {
c = c*(100+p);
b++;
}
while (b <= n) {
a = a*100;
b++;
}
d = c/a;
IO.println(d);
}
}
für K= 1000, p = 5 und n = 2 kommt das richtige ergebnis nur ohne komma(immerhin) für große werte gehts gar net (denke es liegt an Int, da wir das nehmen sollen kein problem) aber für zb K= 100, p=9 und n=20 kommt -3217726 oder so, WAAAARUM?
hier mal der komplette code. irgendjemand ne idee warums nicht funktioniert? wäre sooo dankbar
Code:
/**
* Write a description of class test1 here.
*
* @author (your name)
* @version (a version number or a date)
*/
import AlgoTools.IO;
public class test1 {
public static void main (String [] argv) {
int K = 1;
int p = 1;
int n = 1;
int c = K;
int a, b, d, q;
a = 100;
q=1;
b=0;
while (q == 1) {
K = IO.readInt("Bitte geben Sie Ihr Startkapital ein ");
p = IO.readInt("Bitte geben Sie den Prozentsatz als ganze Zahl ein.Bsp: 5 für 5% ");
n = IO.readInt("Bitte geben Sie die laufzeit in Jahren ein ");
while (b <= n) {
c = c*(100+p);
b++;
}
b=0;
while (b <= n) {
a = a*100;
b++;
}
d = c/a;
d= d/100;
IO.println(d);
q = IO.readInt("Wollen Sie eine weitere Berechnung durchführen? 0=Nein,1=Ja ");
if (q == 0) {
IO.println("Auf Wiedersehen");
}
while ((q != 0) && (q != 1)) {
q = IO.readInt("Wollen Sie eine weitere Berechnung durchführen? 0=Nein,1=Ja ");
b=0;
c=0;
d=0;
}
}
}
}
Wenn d vor der Auswertung dieser Zeile irgendeinen Wert zwischen 0 und 99 (eingeschlossen) enthält, wird d nach Auswertung dieser Zeile den Wert 0 haben. Das liegt daran, dass d und 100 vom Typ int sind, und bei int/int wird eine Ganzzahldivision durchgeführt. (Ich denke mal, das ist es auch, was dich stutzig macht; ich hab's nie probiert.)
Und zu deinem "Häh":
Code:
while ((q != 0) && (q != 1))
In diese Schleife kommst du nur, wenn du in der vorangegangenen Frage weder mit 0 noch mit 1 geantwortet hast, ergo eine Zahl eingibst, die weder "Ja" noch "Nein" repräsentiert.
hab die zeile weggenommen, jetzt kommt anstatt 0 ne 1 ^^
die while schleife soll so, aufgabe war, wenn man ne andere zahl als 0 oder 1 eingibt soll die anfrage nochmal kommen, das funktioniert ja auch
Ich sehe gerade, dass du - noch viel perverser - die gleiche Abfrage zweimal in deinem Quelltext hast. :shock: (Eine Anforderung an einen Algorithmus ist, dass er endlich viele Anweisungen enthält - so habe ich das jedenfalls gelernt. Du bist aber gerade gut dabei, unendlich oft die Abfrage einzubauen.) Strukturier mal bitte deinen Code etwas besser (Stichwort: Einrückungen etc.) - und deine Gedanken.
wenn jemand ne idee oder tipps hat nur her damit, das verlängert meine nacht, da morgen abgabe ist.
also aufgabe: die formel ausrechnen und danach abfrage ob man nochmal will oder nicht, wobei 1 ja und 0 nein sein soll. jede andere zahl soll die abfrage nochmal bringen
Von der Sacheher wars ganz einfach das dingens zum Laufen zu bekommen !
1. "b++" in "++b" ändern
2. natürlich deine letzte whileschleife (Endlosschleife) in
Code:
if (q == 0) {
IO.println("Ende");
System.exit(0);
}
ändern.
Nochmal alles zusammen, ob richtig gerechnet wird weis ich nicht, will ich auch nicht wissen
Code:
import AlgoTools.IO;
public class Kapital {
public static void main(String[] argv) {
int a, b, c, d, e, K, n, p, q;
K = IO.readInt("Bitte den Betrag des Anfangskapitals eingeben");
n = IO.readInt("Bitte den Zinssatz eingeben");
p = IO.readInt("Bitte die Laufzeit in Jahren eingeben");
q = 1;
b = 0;
d = 100;
e = d;
a = (100 + p);
c = a;
while (q == 1) {
do {
a = a * c;
d = d * e;
b = (++b);
} while (b <= n);
K = ((K * a) / d);
IO.println(K);
q = IO.readInt("Fortfahren?");
}
if (q == 0) {
IO.println("Ende");
System.exit(0);
}
}
}