Die ersten vier perfekte Zahlen.

Shakti

Mitglied
Hallo an alle hier im Java Forum.
Kurz zu mir da ich neu hier bin. Ich habe dieses Jahr eine Ausbildung zum Fachinformatiker Anwendungsentwicklung angefangen. Ich habe bevor ich angefangen bin noch nie was mit programmieren zu tun gehabt deshalb ist der Einstieg für mich durchaus nicht einfach.

Das gute ist es macht mir Spaß und Interesse habe ich auch sehr daran. Ich habe mir ein Buch gekauft mit dem ich nebenbei dann noch lernen kann.

So nun kurz zu dem was ich bis jetzt gehabt habe oder mir durch das Buch angelesen habe.

Für die folgenden Themen sollten wir in der Schule selbst in Gruppen Schulungsunterlagen erstellen was wir auch gemacht haben.

1. Objekte/Instanzen
2. Konstruktoren
3. Methoden (ohne Übergabeparameter, ohne Rückgabeparameter;
ohne Übergabeparameter, mit Rückgabeparameter;
mit Übergabeparameter, ohne Rückgabeparameter;
mit Übergabeparameter, mit Rückgabeparameter)
4. Instanzvariablen, Datentypen
5. Klassenvariablen, Klassenmethoden
6. Überladen von Methoden
7. Datenkapselung

Dazu haben wir dann eine Aufgabe bekommen die alles dort beinhaltet. Für mich leider nicht alleine lösbar leider verstehe ich auch nicht warum so was nicht Schritt für Schritt der Lehrer beibringt.

Dann haben wir eine Zusammenfassung von dem Lehrer bekommen wo alle logischen Operatoren If Anweisung, Switch Case drauf war.
Als nächstes haben wir die for Schleife, while schleife und do also die Syntax an der Tafel gesehen und eine ca. 10sek Erklärung dazu bekommen.

So das zu meinen erwarteten Wissenstand vom Lehrer. Realität sind nicht so dolle aus^^

Ok jetzt zur eigentlichen Aufgabe.
Nach dem wir die letzte genannten Anweisungen bzw. Schleifen gesehen haben bekamen wir folgende Aufgabe:

Bitte schauen sie im Internet was "Perfekte Zahlen" sind und schreiben sie Java Programm das die ersten vier Perfekten Zahlen ausgibt.

So das war für einfach nicht lösbar :(
Als ich den Lehrer fragte habe ich prompt die Lösung bekommen ohne richtige Erklärung dazu.
Gut am Code kann man ja schon einiges sehen.
Ich hoffe ich mache das nun richtig mit dem Code einfügen ^^

Java:
public class Volkommen {

	
	public static void main(String[] args) {
		
		
		
		for(int i=1;i<=10000;i++)
		{
			
			int summe = 0;
			for(int j = 1; j<i;j++)
		 {	
				if(i%j==0)
			{
				
				summe = summe + j;
			}
		 } 
			if (summe==i)
			{
				System.out.println(i);
			}
		}
	

	}
}

Was ich halt sehe ist, dass erst mal i erhöht wird bis 6 wenn das so weit ist dann sollte j = 5 sein.
j ist für mich immer eins kleiner als i. Genau da liegt mein Problem. Es müsste aber doch so sein das i und j den Wert 6 annehmen dann die If Anweisung kommt und 6/6 =0 also wird die erste perfekte Zahl ausgegeben also die 6??

Kann mir evtl. jemand erklären wir das Funktioniert ich blick da einfach nicht durch :(

P.S. Was innere/ äußere Blöcke sind wurde nie gesagt auch was verschachtelte Schleifen sind wurde nichts von gesagt. Ich weiß es nur da ich mit einem Buch noch lerne.

Das war viel Text auf einmal aber so sollte evtl. jeder wissen was ich können sollte und wer ich bin.

Danke für jede Hilfe bei diesem Problem und hoffe in der Zukunft hier gute Hilfe bekommen zu können.


Einen guten Start in die Woche wünsche ich :)

Viele Grüße aus NRW
 
T

Trolllllll

Gast
Hast du gemacht, was dein Lehrer von dir wollte, mal im internett geschaut, was das ist, volkommene Zahl? Vollkommene Zahl ? Wikipedia Hättest du wahrscheinlich auch gefunden, wenn du wüstest wie man googelt ;-) aber das ist echt kompliziert, wenn du weißt was deine Aufgabe ist, schau dir den code nochmal an.

[WR]PS. 6/6 ist niemals 0 sondern wäre 1[/WR]
 

Spewer

Aktives Mitglied
Da du ja schon gemerkt hast, dass die 6 die erste vollkommene Zahl ist, versuche ich mal den Programmablauf bei i = 6 zu erklären:

Also: i = 6 und summe = 0

nun beginnt die zweite Schleife mit j = 1 und j wird solange erhöht, bis : j < i also j = 5.
Das Programm überprüft nun ( in der zweiten for-Schleife ) ob i%j == 0 ist.
Bsp: i = 6 und j = 1 => Modulo = 0
Wenn der Modulo = 0 ist, wird die Summe um den Wert von j erhöht, also Summe = 0 + 1 im ersten Durchlauf.

j = 2 => Modulo 0, Summe = 1 + 2 = 3
j = 3 => Modulo 0, Summe = 3 + 3 = 6

j = 4 => Modulo != 0, Summe bleibt gleich also 6
j = 5 => Modulo != 0, Summe bleibt gleich also 6

Jetzt ist j = 5 also verlassen wir die innere Schleife und kommen zur letzten if-Abfrage.
Summe == i . Das ist die Bedingung dafür, dass die Zahl vollkommen ist.
Und da die Summe bei i = 6 nun mal auch 6 ist, ergibt sich die Lösung.

Hoffe das hilft etwas.
 

Shakti

Mitglied
Hast du gemacht, was dein Lehrer von dir wollte, mal im internett geschaut, was das ist, volkommene Zahl? Vollkommene Zahl ? Wikipedia Hättest du wahrscheinlich auch gefunden, wenn du wüstest wie man googelt ;-) aber das ist echt kompliziert, wenn du weißt was deine Aufgabe ist, schau dir den code nochmal an.

[WR]PS. 6/6 ist niemals 0 sondern wäre 1[/WR]

Hallo ja natürlich habe ich das gemacht.... Nur deshalb weiß man noch lange nicht wie man so ein Java Programm schreiben muss bzw wie ich den Code lesen muss um dahinter zu kommen wie das funktioniert.
 
T

Trolllllll

Gast
...
Bitte schauen sie im Internet was "Perfekte Zahlen" sind und schreiben sie Java Programm das die ersten vier Perfekten Zahlen ausgibt.
...
Du hast hier schritt eins gesehen, schauen sie im Internet was "Perfekte Zahlen" sind? Mach das, dann verstehst du den code auch, bzw Spewer hat ihn dir ja jetzt auch ordentlich erklärt ;-)

Nur der Code hat einen Fehler, er soll die ersten vier ausgeben, jedoch ist dieses abbruchkriterium nicht drinnen :-(

Java:
public class Volkommen {
    public static void main(String[] args) {
        int counter =0;
        for(int i=1;i<=10000;i++){
            int summe = 0;
            for(int j = 1; j<i;j++){  
                if(i%j==0){
                summe = summe + j;
            }
         } 
            if (summe==i){
                System.out.println(i);
                counter++;
                if (counter>3){
                   break;
                }
            }
        }
    }
}

[EDIT]Mhh so kompliziert ist der Code nicht, und das die innere schleife nicht 6 werden darf, wäre dir dann aufgefallen, da in dem Artikel den ich gepostet habe ja steht, alle Zahlen außer sich selber ;-) aber wenn man das konzept und java nicht versteht, dann ist es schwer den code zu verstehen[/EDIT]
 

Spewer

Aktives Mitglied
Du hast hier schritt eins gesehen, schauen sie im Internet was "Perfekte Zahlen" sind? Mach das, dann verstehst du den code auch, bzw Spewer hat ihn dir ja jetzt auch ordentlich erklärt ;-)

Nur der Code hat einen Fehler, er soll die ersten vier ausgeben, jedoch ist dieses abbruchkriterium nicht drinnen :-(

Java:
public class Volkommen {
    public static void main(String[] args) {
        int counter =0;
        for(int i=1;i<=10000;i++){
            int summe = 0;
            for(int j = 1; j<i;j++){  
                if(i%j==0){
                summe = summe + j;
            }
         } 
            if (summe==i){
                System.out.println(i);
                counter++;
                if (counter>3){
                   break;
                }
            }
        }
    }
}

[EDIT]Mhh so kompliziert ist der Code nicht, und das die innere schleife nicht 6 werden darf, wäre dir dann aufgefallen, da in dem Artikel den ich gepostet habe ja steht, alle Zahlen außer sich selber ;-) aber wenn man das konzept und java nicht versteht, dann ist es schwer den code zu verstehen[/EDIT]

Das mit dem Abbruchkriterium ist mir aufgefallen, aber ich hatte es einfach mal "überlesen" um es nicht unnötig kompliziert zu machen
 
T

Trolllllll

Gast
War nicht gegen dich gerichtet, du hast ja nur den existierenden Code erklärt, nur war der halt nicht, auch wenn vom Lehrer gegeben, nicht der richtige, es sei denn die 5 kleinste perfekte Zahl ist über 10.000 ;-)
 

Spewer

Aktives Mitglied
War nicht gegen dich gerichtet, du hast ja nur den existierenden Code erklärt, nur war der halt nicht, auch wenn vom Lehrer gegeben, nicht der richtige, es sei denn die 5 kleinste perfekte Zahl ist über 10.000 ;-)

Die vollkommenen Zahlen sind eig. ein extrem interessantes Thema. Wenn man die Zahlen kennt, ist die 10000 schon gut gewählt. Die 5. vollkommene Zahl ist nämlich die : 33.550.336
 
T

Trolllllll

Gast
Ja stimmt, aber das finde ich ziemlich unsauber programmiert, dann könnte ich es auch so programieren

Java:
public class Volkommen {
    public static void main(String[] args) {
       System.out.println("6");
       System.out.println("28");
       System.out.println("496");
       System.out.println("8.128");
    }
}

eher so, das wäre finde ich richtig

Java:
public class Volkommen {
    public static void main(String[] args) {
        int counter =0;
        int i=0;
        while(counter<4){
            i++;
            int summe = 0;
            for(int j = 1; j<i;j++){  
                if(i%j==0){
                   summe = summe + j;
                }
            } 
            if (summe==i){
                System.out.println(i);
                counter++;
            }
        }
    }
}
 

Spewer

Aktives Mitglied
Eine Zahl ist eine vollkommene Zahl, wenn sie gleich der Summe ihrer positiven Teiler ist. (außer sich selbst)
Bsp: 1 + 2 +3 = 6 <= Somit vollkommene Zahl
 
T

trääät

Gast
Ich habe dieses Jahr eine Ausbildung zum Fachinformatiker Anwendungsentwicklung angefangen. Ich habe bevor ich angefangen bin noch nie was mit programmieren zu tun gehabt deshalb ist der Einstieg für mich durchaus nicht einfach.
ganz erlich : das war schon mal der erste fehler ...
anwendungsentwicklung ist ein sehr komplexes thema in das man auch in eine erst-ausbildung bereits vorkenntnisse mitbringen sollte ...
einfach von 0 auf 100 sich da rein stürzen ist meist nie eine gute idee

Das gute ist es macht mir Spaß und Interesse habe ich auch sehr daran. Ich habe mir ein Buch gekauft mit dem ich nebenbei dann noch lernen kann.
schön das es dir spaß macht ... so treffen dich miss-erfolge nicht ganz so hart als wenn du es nur machen würdest weil du es musst ... aber glaub mir : wenn man nicht schon vorher freude am programmieren hatte kann diese auch schnell wieder verfliegen ...

[basic-krams]
Dazu haben wir dann eine Aufgabe bekommen die alles dort beinhaltet. Für mich leider nicht alleine lösbar leider verstehe ich auch nicht warum so was nicht Schritt für Schritt der Lehrer beibringt.
weil der lehrer sicherlich erwartet das wenn man in diesen berufszweig einsteigt bereits vorkenntnisse hat ... wenn auch nicht sonderlich umfangreich aber wenigstens die basics sollte man wirklich drauf haben ...
und dabei rede ich jetzt nicht von einer speziellen sprache oder einem bestimmten programmier-paradigma sondern allgemeine grundlagen der anwendungsentwicklung ... denn die sind großteil in jeder sprache gleich

Dann haben wir eine Zusammenfassung von dem Lehrer bekommen wo alle logischen Operatoren If Anweisung, Switch Case drauf war.
Als nächstes haben wir die for Schleife, while schleife und do also die Syntax an der Tafel gesehen und eine ca. 10sek Erklärung dazu bekommen.
da loops, if, switch und ähnliches zu elementaren grundlagen von fast allen sprachen sind reicht das auch ...
beim syntax hätte man allerdings näher drauf eingehen müssen ... denn dieser ist in java zwar nicht sehr kompliziert ... muss aber strikt eingehalten werden

Ok jetzt zur eigentlichen Aufgabe.
Nach dem wir die letzte genannten Anweisungen bzw. Schleifen gesehen haben bekamen wir folgende Aufgabe:

Bitte schauen sie im Internet was "Perfekte Zahlen" sind und schreiben sie Java Programm das die ersten vier Perfekten Zahlen ausgibt.
ist an sich eine ganz klare ansage was zu tun ist

1) google fragen : "perfekte zahlen"
1.5) zettel und stift nehmen und versuchen das gelesene schritt für schritt nachzuvollziehen ... in dem fall reicht grundschul-mathematik aus ...
2) mathematischen algorithmus in geforderter sprache implementieren

So das war für einfach nicht lösbar :(
Als ich den Lehrer fragte habe ich prompt die Lösung bekommen ohne richtige Erklärung dazu.
ja ... so sind sie die lieben info-lehrer ...
grund ist meist das diese selbst info nur als nebenfach haben und meist selbst so gut wie keinen plan von dem haben was sie ihren schülern beibringen sollen ...
einen qualifizierten und kompetenten info-dozenten zu haben ist ein segen ... den leider so gut wie niemand erfährt ...

die erklärung zum code wäre der oben bei 1.5 genannte zettel auf dem für dich selbst verständlich der mathematische algorithmus stehen sollte ... und der code wäre dann nur das beispiel wie man diesen in java implementiert

[code-krams]

Was ich halt sehe ist, dass erst mal i erhöht wird bis 6 wenn das so weit ist dann sollte j = 5 sein.
j ist für mich immer eins kleiner als i. Genau da liegt mein Problem. Es müsste aber doch so sein das i und j den Wert 6 annehmen dann die If Anweisung kommt und 6/6 =0 also wird die erste perfekte Zahl ausgegeben also die 6??
an sich erstmal nicht so ganz richtig
was man zu erst sieht ist folgendes
zwei geschachtelte for-loops
der äußere loop zählt "int i" von 1 bis 10'000 durch
innerhalb des äußeren loops wird für jeden durchgang eine lokale variable "int summe" angelegt
der innere loop durchläuft nun "int j" von 1 bis "i-1" und prüft dabei ob "i mod j == 0" ergibt, wenn ja wird "j" zu "summe" hinzuadiert

-> hier kommen wieder grundlagen ins spiel : "%" bedeutet MODULUS ... und MOD gibt den DIVISIONS-REST zurück ... also bei 4%6 = 4 ... der sinn dieser anweisung ist es um zu sehen ob "i" restlos durch "j" teilbar ist ... also ob "j" ein teiler von "i" ist ... und wenn ja wird dies zu "summe" hinzuaddiert > mathematischer grund-algorithmus einer "perfekten zahl"

ist der innere loop durch wird geprüft ob die summe aller gefundenen teiler gleich der zahl selbst ist , also ob "i" eine "perfekte zahl" ist ... wenn ja wird diese ausgegeben

Kann mir evtl. jemand erklären wir das Funktioniert ich blick da einfach nicht durch :(
habe ich eben getan als ich dir erklärt habe was man "auf den ersten blick sieht" wenn man sich den code anschaut

P.S. Was innere/ äußere Blöcke sind wurde nie gesagt auch was verschachtelte Schleifen sind wurde nichts von gesagt. Ich weiß es nur da ich mit einem Buch noch lerne.
weil das zu den oben erwähnten grundlagen vieler moderner sprachen gehört ... die der lehrer scheinbar vorraussetzt ...
wie ich anriss : es ist nicht gerade die aller beste idee sich direkt in die anwendungsentwicklung reinzuwerfen wenn man nicht vorher selbst mal mit sowas rumgespielt hat ... denn dann fehlen einem einfach wichtige grundlagen ...

die schuld immer auf die lehrkräfte schieben haut nun mal gerade bei diesem speziellen thema einfach nicht hin ... egal ob eine einfache erst-ausbildung oder ein komplexes studium ... wenn man selbst den kardinal-fehler begeht und komplett ohne vorkenntnisse da rein rennt ... ist man nun mal leider selbst schuld wenn man dabei auf die schnauze fliegt ...
und das meine ich jetzt nicht negativ oder abwertend sondern will dir jetzt lediglich im nachhinein klar machen : es wäre besser gewesen wenn du dich vorher mal so n gutes jahr bis ein paar jahre mit programmierung beschäftigt hättest ... anstatt jetzt von 0 auf 100 gleich in eine ausbildung zu schlittern in der irgendwie alle von dir eben genau das und damit verbundene grundlagen erwarten ...

deine einzige chance ist jetzt lediglich dich in der nächsten zeit intensiv mit dem lehr-material zu befassen ...
 

faetzminator

Gesperrter Benutzer
anwendungsentwicklung ist ein sehr komplexes thema in das man auch in eine erst-ausbildung bereits vorkenntnisse mitbringen sollte ...
einfach von 0 auf 100 sich da rein stürzen ist meist nie eine gute idee

weil der lehrer sicherlich erwartet das wenn man in diesen berufszweig einsteigt bereits vorkenntnisse hat ... wenn auch nicht sonderlich umfangreich aber wenigstens die basics sollte man wirklich drauf haben ...

[...] die der lehrer scheinbar vorraussetzt ...
wie ich anriss : es ist nicht gerade die aller beste idee sich direkt in die anwendungsentwicklung reinzuwerfen wenn man nicht vorher selbst mal mit sowas rumgespielt hat ... denn dann fehlen einem einfach wichtige grundlagen ...

Bin überhaupt nicht dieser Meinung. Wie können nur immer wieder irgendwelche Typen behaupten, mann bräuchte für eine Grundbildung Vorwissen (abgesehen vom "normalen" schulischen Wissen)?
Ich hab in der CH eine Informatik-Ausbildung "genossen" und verstehe absolut, dass die meisten Lehrer/Dozenten einfach nichts drauf haben. Aber programmieren lernt man nunmal auch nicht in der BS, sondern im Betrieb bei der täglichen (Weiter-)Enwicklung von Projekten.
Müssen wir hier auf Azubis rumhacken? Zumindest hatte er im Erstpost bereits eine kleine Analyse des Codes, und dazu eine klare Frage...
 
T

trääät

Gast
ich kann es persönlich leider auch nicht nachvollziehen warum jemand der scheinbar so inkompetent ist lehrer / dozent für informatik / fachrichtung ist ...
aber es nun mal der fakt das ein großteil der lehrkräfte genau dieses punkt voll und ganz erfüllen ... worunter natürlich die schüler extrem zu leiden haben ...
sicher gibt es ausnahmen und wirklich kompetente fachkräfte ... aber das ist nun mal eher selten ...

und ich habe auch gar nicht auf TO rumgehackt ... sondern lediglich aufgezeigt was so "die normale regel" in punkto informatik ist ...

warum du ausgerechtet die stellen zitierst in denen ich darauf hinweise das es nun mal viele gibt die grundlagen einfach vorraussetzen kann ich nicht verstehen ... denn erlich : wäre ich lehrkraft in einer BS für informatik-azubis würde ich auch gewisse grundlagen (nicht java-spezifisch) vorraussetzen ... z.b. das man in der lage ist zwischen binär, oktal, dezimal und hexadezimal umzurechnen ohne das man dies vermitteln muss ... weil sowas nun mal wirklich elementare grundalgen sind und sicher niemand die zeit oder gar die lust hat sowas 40 mal zu erklären nur weil sich 40 azubis gedacht haben : hey , ich habe zwar kein plan davon aber ich will programmierer werden ... und so einen haufen würde ich dann auch ganz bewusst "abschießen" ...
 
B

bone2

Gast
denn erlich : wäre ich lehrkraft in einer BS für informatik-azubis würde ich auch gewisse grundlagen (nicht java-spezifisch) vorraussetzen ... z.b. das man in der lage ist zwischen binär, oktal, dezimal und hexadezimal umzurechnen ohne das man dies vermitteln muss ... weil sowas nun mal wirklich elementare grundalgen sind und sicher niemand die zeit oder gar die lust hat sowas 40 mal zu erklären nur weil sich 40 azubis gedacht haben : hey , ich habe zwar kein plan davon aber ich will programmierer werden ... und so einen haufen würde ich dann auch ganz bewusst "abschießen" ...
genau sowas lernt man aber in der BS und zwar bis zum erbrechen. die Lehrer haben ja von sonst nix ne ahnung, wie sollen sie da was vorraussetzen. wir haben im ersten jahr mit dem urigsten urschleim angefangen.
sie dürfen garnichts vorraussetzen. schließlich kannman auch ne ausbildung zum tischler machen ohne jemals ne säge in der hand gehabt zu haben.
wir hatten eine dabei die bisher mit computern nicht mehr als facebook gemacht hat und selbst die musste mitgeschleift werden.
Zitat Lehrer Anwendungsentwicklung 3. Jahr:
"Wo ist der Tabulator?"
 
T

TryToHelp

Gast
ganz erlich : das war schon mal der erste fehler ...
anwendungsentwicklung ist ein sehr komplexes thema in das man auch in eine erst-ausbildung bereits vorkenntnisse mitbringen sollte ...
einfach von 0 auf 100 sich da rein stürzen ist meist nie eine gute idee
...
Ähm wieso das?
Ja es ist kompliziert, aber genau deswegen macht man ja eine Ausbildung und da nunmal Informatik in Deutschland leider noch kein Pflichtfach ist und größtenteils garnicht erst an den Schulen existiert (teilweiße wird da Word-Kurs als Info verkauft) kann man das also nicht als Vorraussetzungen nehmen.
Und ich hatte an meiner Schule kompetente Informatik Lehrer, also die gibt es schon ;-)
 

faetzminator

Gesperrter Benutzer
und ich habe auch gar nicht auf TO rumgehackt ... sondern lediglich aufgezeigt was so "die normale regel" in punkto informatik ist ...
Also deine Einstellung gegenüber Azubis?
Tatsache ist, dass Dozenten meistens sch**sse sind. Tatsache ist ebenfalls, dass sich leider die Azubis privat nicht dafür interessieren. Tatsache ist aber auch, dass man schlichtweg für eine Berufslehre (zumindest in CH so genannt) kein spezielles Wissen mitbringen muss.

warum du ausgerechtet die stellen zitierst in denen ich darauf hinweise das es nun mal viele gibt die grundlagen einfach vorraussetzen kann ich nicht verstehen
Wenn, dann sind das diese "Dozenten", und die sind - da sind wir gleicher Meinung - eh planlos...
wäre ich lehrkraft in einer BS für informatik-azubis würde ich auch gewisse grundlagen (nicht java-spezifisch) vorraussetzen ... z.b. das man in der lage ist zwischen binär, oktal, dezimal und hexadezimal umzurechnen ohne das man dies vermitteln muss ...
Man lernt aber nunmal so was nicht im "normalen" Leben / der Schule. Wie willst du so was verlangen, wenn du nicht mal 5min erklären würdest, was Hex überhaupt ist?
weil sowas nun mal wirklich elementare grundalgen sind und sicher niemand die zeit oder gar die lust hat sowas 40 mal zu erklären [...]
Darum gibts einen Dozenten vor 40 Azubis. Der kann das 1x erklären.

Deine Einstellung ist sicherlich nicht schlecht. Wenn du dich privat damit auseinander setzt und Interesse daran hast, bist du hoffentlich auch ein Programmierer mit gutem Hintergrundwissen. Aber das kann man nunmal nicht von Azubis verlangen.
Was würdest du sagen, wenn du dich als Koch-Azubi meldest, und die sagen dir ab, weil du noch nie eine Ente à la wasAuchImmer gekochst hast?
Abgesehen davon lernt man - zumindest in der CH - sogar solchen "Grümpel" wie Office in wochenlanger Arbeit (also wirklich von Word-Grundlagen zu den Word-Serienbriefe, Excel-Grundlagen bis Makros etc.).
 
H

hüteüberhüte

Gast
Hm, hätte vlt. so geschrieben:
Java:
package javaforum;

/**
 * @author hütte
 */
public abstract class AbstractPerfekteZahlen {

    public abstract void nächsteZahl(long zahl);

    public void nächsteZahlen(long bis) {
        for (long i = 6; i <= bis; i++) {
            long sum = 0;
            for (long j = 1; j <= i / 2; j++) {
                if (i % j == 0) {
                    sum += j;
                }
            }
            if (sum == i) {
                nächsteZahl(i);
            }
        }
    }

    public void nächsteZahlen(byte anzahl) {
        if (anzahl > 8) {
            throw new IllegalArgumentException(anzahl + " > 8");
        }
        for (long i = 6; anzahl > 0; i++) {
            long sum = 0;
            for (long j = 1; j <= i / 2; j++) {
                if (i % j == 0) {
                    sum += j;
                }
            }
            if (sum == i) {
                nächsteZahl(i);
                anzahl--;
            }
        }
    }

    public static void main(String[] args) {
        AbstractPerfekteZahlen perfekteZahlenImpl =
                new AbstractPerfekteZahlen() {

                    int i = 1;

                    @Override
                    public void nächsteZahl(long zahl) {
                        System.out.println(i++ + ". " + zahl);
                    }
                };
        perfekteZahlenImpl.nächsteZahlen(8128L);
        perfekteZahlenImpl.nächsteZahlen((byte) 4);
    }
}
Also nur bis i/2 rechnen lassen.

Bis 2.305.843.008.139.952.128 (8. Zahl) kann es sich aber ganz schön hinziehen. Mir fällt auf die Schnelle auch nicht ein, wie es schneller geht.
 
Zuletzt bearbeitet von einem Moderator:

Shakti

Mitglied
So bin nun zuhause und bekomme einen kleinen Schock.

Zu erst einmal habe bis zum Fachabitur kein programmieren in der Schule gehabt. Mein Fachabi wollte ich gerne in der Richtung machen nur leider gab es sowas nicht in meiner Nähe.

Das man die Dinge die trääät da beschriebt vorrausetzt ist doch wohl totaler Blödsinn.

Zum Thema das auf einem "rumgehackt" wird. Ehrlich gesagt so fühlt man sich wenn man sich ein paar Antworten hier durchließt.

Das diese Ausbildung nun sehr schwer wird steht außer Frage aber ich werde das trotzdem durchziehen und schaffen :rtfm:

Ob ich hier nochmal eine Frage stelle weiß ich ehrlich gesagt nicht.

Danke an die Leute die hier nicht der Meinung von trääät waren.
 

faetzminator

Gesperrter Benutzer
Warum aber so viele auf deinem Lehrer rumhaken, verstehe ich auch nicht.
Ich hab nur gesagt, dass viele Dozenten in meiner BS oder ÜK einfach nichts drauf hatten, auf alle Fälle sind mir mehr von diesen negativ (~8?) als positiv (~4?) in Erinnerung. Nicht erwähnt die 2, 3 die irgendwie einfach... Dozenten waren!?
Es ist einfach krass, wenn ein Lehrer in der BS dir den C-Code auf Papier kopiert und bei [c]while ((x = foo.bar()) != y)[/c] o.ä. bei dir nachfragen, ob so was geht... Oder jener, der bei einer Prüfung zum Thema Lizenzen (mit WXP, GPL u.ä. als Beispiele) eine Antwort zu GPL falsch korrigierte und bei Vorweisung der Lizenz in en und de nur sagte: "im Zweifelsfall zählt mein Skript!".
Umgekehrt hatten wir Dozenten, welche für Prüfungen Pflichtenhefte vorlegten, z.B. "Ich finde auf dem Webshop einen Login (1 Punkt) und kann mich erfolgreich anmelden (3)." Diese waren tendenziell auch jene, welche fachlich um ein weites überzeugender waren als die anderen.
Aber das ist auch kein Grund, hier keine Fraagen mehr zu stellen. ;)
Hoffentlich nicht :)
 
T

Trolllllll

Gast
So bin nun zuhause und bekomme einen kleinen Schock.

Zu erst einmal habe bis zum Fachabitur kein programmieren in der Schule gehabt. Mein Fachabi wollte ich gerne in der Richtung machen nur leider gab es sowas nicht in meiner Nähe.

Das man die Dinge die trääät da beschriebt vorrausetzt ist doch wohl totaler Blödsinn.
Wie gessagt, das kann ich mir nicht vorstellen, dass das vorraussetzungen sind, die sind es ja nicht mal beim Studium, da kann ich mir nicht vorstellen, das es bei einer Ausbildung so ist, und bei anderen Berufen wird es auch nicht vorausgesetzt, vielleicht nice to have, aber ich kenne genügend, die mit vorwissen in die BS gegangen sind und sich dort deswegen zutode gelangweilt haben und manchmal auch den unterricht halten durften, weil der Lehrer keine Lust hatte.
Zum Thema das auf einem "rumgehackt" wird. Ehrlich gesagt so fühlt man sich wenn man sich ein paar Antworten hier durchließt.
Ich möchte mich entschuldigen für meinen Ton, nur gibt es hier genügend, die mit solchen Fragen kommen, nur um schnell die Hausaufgabe gemacht zu bekommen ohne eigenen aufwand. Und bei deinem Eingangspost kam es mir so vor, als ob du dir nicht mal das Mathematische Prinzip der Perfekten Zahlen angeschaut hättest, was eine kurze suche bei google, den Wiki Artikel gezeigt hätte, der es recht einfach erklärt. Aber eventuell bin ich da von mir ausgegangen und nur weil er für mich sehr einleuchtent ist, muss er das nicht für jeden sein
Das diese Ausbildung nun sehr schwer wird steht außer Frage aber ich werde das trotzdem durchziehen und schaffen :rtfm:
Ich drücke dir auf jedenfall die Daumen und mit dem nötigen Interesse, ist es auf jedenfall auch ohne Vorkentnisse schaffbar
Ob ich hier nochmal eine Frage stelle weiß ich ehrlich gesagt nicht.

Danke an die Leute die hier nicht der Meinung von trääät waren.
Ich möchte mich nochmal für meine Antworten entschuldigen und werde auch weitere Fragen beantworten.
 
B

bone2

Gast
Also bei uns wirds vorausgesetzt. Warum aber so viele auf deinem Lehrer rumhaken, verstehe ich auch nicht. Aber das ist auch kein Grund, hier keine Fraagen mehr zu stellen. ;)
Ehrlich?
Die erste Woche in der Berufsschule haben wir ein AdditionsProgramm geschrieben. Mit fertigen, statischen IO Bibliotheken. Da gab es lediglich Variablen, weder Parameter oder gar wuhu Verzweigungen.
If-Else war die zweite Woche und Schleifen die Dritte.
Das erste OOP hatten wir im zweiten! Lehrjahr...

Unsere Lehrer waren durchweg schlecht, haben falsche Fakten präsentiert und manche sogar darauf beharrt. Selbst mit Quellennachweis war ihr von Unis/anderen Lehrern geklautes Skript noch richtig.

Ob ich hier nochmal eine Frage stelle weiß ich ehrlich gesagt nicht.
Willkommen im Internet :) Frag einfach, irgendwer flamt, aber ne Anwort wirst du von jemanden trotzdem bekommen.
 
Zuletzt bearbeitet von einem Moderator:

Shakti

Mitglied
Wie gessagt, das kann ich mir nicht vorstellen, dass das vorraussetzungen sind, die sind es ja nicht mal beim Studium, da kann ich mir nicht vorstellen, das es bei einer Ausbildung so ist, und bei anderen Berufen wird es auch nicht vorausgesetzt, vielleicht nice to have, aber ich kenne genügend, die mit vorwissen in die BS gegangen sind und sich dort deswegen zutode gelangweilt haben und manchmal auch den unterricht halten durften, weil der Lehrer keine Lust hatte.

Ich möchte mich entschuldigen für meinen Ton, nur gibt es hier genügend, die mit solchen Fragen kommen, nur um schnell die Hausaufgabe gemacht zu bekommen ohne eigenen aufwand. Und bei deinem Eingangspost kam es mir so vor, als ob du dir nicht mal das Mathematische Prinzip der Perfekten Zahlen angeschaut hättest, was eine kurze suche bei google, den Wiki Artikel gezeigt hätte, der es recht einfach erklärt. Aber eventuell bin ich da von mir ausgegangen und nur weil er für mich sehr einleuchtent ist, muss er das nicht für jeden sein

Ich drücke dir auf jedenfall die Daumen und mit dem nötigen Interesse, ist es auf jedenfall auch ohne Vorkentnisse schaffbar

Ich möchte mich nochmal für meine Antworten entschuldigen und werde auch weitere Fragen beantworten.

Schön das du dich entschuldigt hast. Nebenbei das war keine Hausaufgabe oder so. Ich wusste schon was perfekte Zahlen sind nur kam ich einfach nicht mit dem Code klar :)

Mal schauen wie die Zukunft aussehen wird ;)
 
H

hüteüberhüte

Gast
Ehrlich?
Die erste Woche in der Berufsschule haben wir ein AdditionsProgramm geschrieben. Mit fertigen, statischen IO Bibliotheken. Da gab es lediglich Variablen, weder Parameter oder gar wuhu Verzweigungen.
If-Else war die zweite Woche und Schleifen die Dritte.
Das erste OOP hatten wir im zweiten! Lehrjahr...

studiere an einer uni, da wird binär, oktal, dezimal, hexadezimal maximal in einer h behandelt.

Aber die Inhaltsangabe, die er eingangs aufgeführt hat, klingt doch sinnvoll und nicht danach, daß dort nichts gelehrt werden würde. Zu dem ihm gegebenen C-Code muss auch nicht viel gesagt werden, weil darin ja nur Variablen, Kontrollstrukturen u. ein paar arithmetische Operatoren vorkommen (inkls. einer einfachen Kaskade).
 
T

Trolllllll

Gast
studiere an einer uni, da wird binär, oktal, dezimal, hexadezimal maximal in einer h behandelt.
...

Ja aber er hat 1. nichts von einem studium erzählt, 2. ist das auch nicht an jeder uni so

Und eine Berufsschule ist nunmal nicht die Uni, sondt würde man dort schließlich auch seinen Bachelor oder Master oder Diplom bekommen, tut man aber nicht ;-) und was ich von Leuten gehört habe die auf die Berufsschule gehen, wird da bei vielen ziemlich viel die Basics gemacht
 
B

bone2

Gast
Ausbildung zum Fachinformatiker
studiere an einer uni
da hätten wir das Problem ja gefunden.

Berufsschulen fangen in der Tat bei traurigen Basics an, damit eben jeder mitkommt, der noch nie nen Computer von innen gesehen hat und nur wegen dem Arbeitsamt da ist.
Unis fahren da ein ganz anderes, interessantes, forderndes Kaliber. Das bekomme ich nun leider nur noch von meinem, zum Glück guten, Arbeitgeber. da haben andere in meiner Klasse weniger Glück, die html zusammenklicken...
Was ich an der Uni in der ersten Woche hatte, hat in der BS das erste halbe jahr gefüllt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
H Erste Schritte Warum misslingt die Auswertung des ersten Aufrufparameters? Java Basics - Anfänger-Themen 4
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
M Ersten Index von Array bestimmen Java Basics - Anfänger-Themen 14
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
H Ersten Zug bestimmen Java Basics - Anfänger-Themen 12
Java The Hutt Primzahlen - die ersten 100 Java Basics - Anfänger-Themen 17
M JComboBox ersten Eintrag leerlassen bzw. Platzhalter Java Basics - Anfänger-Themen 1
J Erste Schritte Feedback zum ersten Anfängerprogramm Java Basics - Anfänger-Themen 6
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
C Entfernen des ersten String-Elements Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
K Frage zu meinem ersten Programm Java Basics - Anfänger-Themen 5
K OOP Die ersten Schritte bei der Programierung Java Basics - Anfänger-Themen 1
Z Meine ersten Gehversuche Java Basics - Anfänger-Themen 11
D Problem mit meinem ersten JOptionPane - Fatal exception occurred. Program will exit. Java Basics - Anfänger-Themen 6
M Ausführen des ersten Java Programms Java Basics - Anfänger-Themen 2
S Problem beim ersten compilieren überhaubt Java Basics - Anfänger-Themen 43
T gebe mir den ersten eltern knoten Java Basics - Anfänger-Themen 3
C ArrayIndexOutOfBoundsException bei meinem ersten objektiorientierten Programm Java Basics - Anfänger-Themen 4
X SAX die ersten Schritte Java Basics - Anfänger-Themen 5
T Datenbank automatisch erzeugen beim ersten Start Java Basics - Anfänger-Themen 6
I Problem beim Schreiben eines ersten Programms Java Basics - Anfänger-Themen 3
Semox Ersten Wert eines Intervalls bei Berechnung einschließen Java Basics - Anfänger-Themen 8
B Ersten Eintrag aus einer Map bekommen Java Basics - Anfänger-Themen 11
A Die Werte der ersten beiden markierten Check-Boxen registrieren Java Basics - Anfänger-Themen 11
T zweiter Timer überschreibt den ersten Timer ? Java Basics - Anfänger-Themen 5
D Suche in JList nach dem ersten Buchstaben Java Basics - Anfänger-Themen 2
T zweiter thread killt den ersten Java Basics - Anfänger-Themen 2
T Ersten Buchstaben in einem Wort groß schreiben. Java Basics - Anfänger-Themen 6
L beim ersten compilen schon erste probleme Java Basics - Anfänger-Themen 8
K Programmieren von den ersten 70 Fibonacci-Zahlen Java Basics - Anfänger-Themen 2
S Tomcat Error mit meiner ersten JSF Seite Java Basics - Anfänger-Themen 17
M Problem beim Löschen des ersten Eintrags einer TreeSet Java Basics - Anfänger-Themen 3
G die ersten Zeichen eines Strings Vergleichen mit String Java Basics - Anfänger-Themen 6
G ersten Tag des Monats ermitteln Java Basics - Anfänger-Themen 3
N die ersten drei buchstaben eines Strings ausgeben Java Basics - Anfänger-Themen 2
J Überprüfung ersten Zeichens Java Basics - Anfänger-Themen 7
L Probleme beim ersten JavaProgramm! Java Basics - Anfänger-Themen 4
M meine ersten versuche Java Basics - Anfänger-Themen 8
N Kleines Problem mit meiner ersten Klasse Java Basics - Anfänger-Themen 5
S ersten schritte in Java lernen! Java Basics - Anfänger-Themen 3
thE_29 Vor dem ersten Posten bitte lesen! Java Basics - Anfänger-Themen 1
L Kompletter Neuling: Hilfe beim ersten Java Versuchen Java Basics - Anfänger-Themen 12
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
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
C alle möglichen Kombinationen zweier Ziffern auf drei / vier / und 'n" Stellen Java Basics - Anfänger-Themen 11
amgadalghabra Die vier Sortieralgorithmen die durchschnittliche Laufzeit in Millisekunden Java Basics - Anfänger-Themen 37
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
H Vier Augen sehen mehr... Java Basics - Anfänger-Themen 6
A Klassen Klasse um einen Wert zu vier Zahlen zu speichern Java Basics - Anfänger-Themen 7
A Tic Tac Toe - Vier Gewinnt Java Basics - Anfänger-Themen 5
E Weiteres Vier Gewinnt-Spiel Java Basics - Anfänger-Themen 2
J Reset Button im Spiel Vier gewinnt einrichten Java Basics - Anfänger-Themen 8
G boolean Methode Vier gewinnt Java Basics - Anfänger-Themen 6
G Algorithmus im Spiel "vier gewinnt" Java Basics - Anfänger-Themen 3
R Perfekte Zahl Java Basics - Anfänger-Themen 8
T Perfekte Zahlen ausgeben Java Basics - Anfänger-Themen 12
X Perfekte Zahlen mit Teiler ausgeben! Java Basics - Anfänger-Themen 29
L Perfekte Zahlen errechnen Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben