Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : [JAVA] Fehlersuche in einem kleinen Programm



Pfanni
03-11-2002, 11:05
Hallo zusammen,

ich teste jetzt schon eine halbe Ewigkeit an einem kleinen JAVA-Programm herum, kann meinen Denkfehler aber einfach nicht finden. Es soll ein Programm sein, das Perfekte Zahlen berechnet und ausgibt. Eine Perfekte Zahl ist eine Zahl, die gleich der Summe aller ihrer ganzzahligen Teiler (einschließlich 1, aber ohne sich selbst) ist.
z.B.
6 = 3+2+1
28 = 14+7+4+2++1

Ich habe es geschafft das Programm so zu schreiben, dass mir ausgegeben wird ob die übergebene Zahl eine Perfekte Zahl ist oder nicht. Jetzt möchte ich aber eine Modifikation, die alle perfekten Zahlen eines bestimmten Bereichs ausgibt. Und daran bin ich gescheitert. Wäre echt toll, wenn jemand meinen Fehler finden würde. Ich tippe das irgendwas in der Richtung boolean-Zuweisung nicht funktioniert. Vielen Dank.

Grüße
Pfanni

das nicht funktionierende Programm:


class PerfekteZahlen2
{
public static void main(String[] args)
{

int max = Integer.parseInt(args[0]);
int help = 1;



for (int n =1; n<=max; n++)
{

boolean antwort = false;

for (int t = 2; t <= (n/2); t++)
{

if((n%t)==0)
{
help=help + t;

}

}
if(help==n)
{
antwort=true;
}
else
antwort=false;

if(n==1)
{
antwort=false;
}

//if (antwort)
// System.out.println(n + " Ist eine perfekte Zahl.");
//else
// System.out.println(n +" Ist keine perfekte Zahl.");

if (antwort)
System.out.println (n);


}



}
}



das funktionierende Ausgangsprogramm, dass nur eine bestimmte Zahl testet:


class PerfekteZahlen
{
public static void main(String[] args)
{

int n = Integer.parseInt(args[0]);
int help = 1;
boolean antwort = false;

for (int t = 2; t <= (n/2); t++)
{
if((n%t)==0)
{
help=help + t;
}

}

if(help==n)
{
antwort=true;
}
if(n==1)
{
antwort=false;
}

if (antwort)
System.out.println(n + " Ist eine perfekte Zahl.");
else
System.out.println(n +" Ist keine perfekte Zahl.");

}
}

anda_skoa
03-11-2002, 12:11
Es läßt sich einfacher testen, wenn du das Prüfen in einer eigene Methode machst, die du dann in main nur für jede Zahl aufrufst.

Ich denke nämlich, dass der Fehler darin liegt, dss help nach einem Durchlauf wieder auf 1 zurückgesetzt werden müßte.

Ciao,
_

Pfanni
03-11-2002, 14:50
Original geschrieben von anda_skoa
Es läßt sich einfacher testen, wenn du das Prüfen in einer eigene Methode machst, die du dann in main nur für jede Zahl aufrufst.

Ich denke nämlich, dass der Fehler darin liegt, dss help nach einem Durchlauf wieder auf 1 zurückgesetzt werden müßte.

Ciao,
_

Vielen Dank:)
jepp es war help.......hatte ich beim Umschreiben irgendwie übersehen oder nicht richtig nachgedacht. Bei boolean hatte ich diesen Denkschritt noch gemacht aber bei help..........
Aber eins hab ich daraus gelernt......diesen Fehler werd ich hoffentlich nicht mehr machen.

Die Idee mit der Methode klingt gut, ich hab aber leider keine Ahnung wie ich sowas machen müsste. Ich stehe noch am Anfang (1.Sem Informatik) und werde das bestimmt auch noch irgendwann lernen.

cu
Pfanni

anda_skoa
03-11-2002, 22:10
Das ist wirklich ziemlich einfach.



class PerfekteZahlen2
{
public static void main()
{
// hier ruft man einfach für jede zu testende Zahl
// die Methode ist Perfekt auf

for (int i = 1; i < 10; ++i)
{
if (istPerfekt(i))
System.out.println("Zahl " + i + " ist perfekt");
}
}

public static boolean istPerfekt(int n)
{
// hier kommt dann die Überprüfung rein.
// wenn feststeht, dass die Zahl nicht perfekt ist
// macht man return false
// wenn sie perfekt ist, return true
}
}


Ciao,
_

Pfanni
04-11-2002, 08:27
Danke für den Tipp

werde ich bei Gelegenheit mal ausprobieren. Bin immer froh ein paar kleine Schritte zusätzlich zu lernen. Kann man immer gebrauchen:)

Grüße
Pfanni