Methoden "Fröhliche Zahl" true | false

WI'ler

Mitglied
Ich stehe mal wieder vor einem lästigen Problem.

Aufgabenstellung hier

Teil a) habe ich so gelöst:

Java:
class multierg {
    
    public static void main(String[] args) {

    	System.out.print(summeDerZiffernquadrate(19));

    }
    
    public static int summeDerZiffernquadrate(int n)
    {
    	
    	int ergebnis = 0;
    	
    	ergebnis = (n / 10) * (n / 10);
    	n = n % 10;
    	ergebnis = ergebnis + n * n;
       	
    	return ergebnis;
    }
}

Für Teil b) habe ich noch weniger Platz. Wie soll das klappen? Hätte jemand einen Lösungsansatz?
 
Zuletzt bearbeitet:

Kevin94

Top Contributor
Wieso weniger Platz? Wenn der Platz nicht ausreicht, gibts noch ne Rückseite... (in der Klausur sollte man dann aber über einen einfacheren Weg nachdenken)

Du brauchst aber tatsächlich nicht viel Platz, da die Methode, wenn du die Methode aus Teilaufgabe a) und Rekursion nutzt, ein einfacher Dreizeiler ist.
 

jgh

Top Contributor
Ich stehe mal wieder vor einem lästigen Problem.
....
Für Teil b) habe ich noch weniger Platz. Wie soll das klappen? Hätte jemand einen Lösungsansatz?


na ja, wenn das schon lästig ist, dann solltest du dir evtl. ein andere Studienrichtung suchen? Nicht abwertend gemeint, sondern nur ehrlich!


Deine Methode [c]summeDerZiffernquadrate(int n)[/c] ist nicht korrekt. So wird bspw für die Zahl [c]111[/c] die als Summe der Ziffernquadrate
Code:
3
zurückliefern sollte, von deiner Methode
Code:
122
returned. Für 2-stellige Zahlen scheint deine Methode zu funktionieren, für größere Zahlen scheint dieses nicht der Fall zu sein! Hier mal eine korrekte, wenn auch nicht schöne, Lösung für die
Code:
summeDerZiffernquadrate(int n)

Java:
public static int summeDerZiffernquadrate(int n) {

		int ergebnis = 0;
		String help = n + "";
		for (int i = 0; i < help.length(); i++) {
			ergebnis += Integer.parseInt(help.charAt(i) + "")
					* Integer.parseInt(help.charAt(i) + "");
		}

		return ergebnis;
	}


Was meinst du mit "noch weniger Platz?" Ist die Zahl der LoC´s begrenzt, oder bez. des Platzes auf einem Aufgabenzettel?

Hast du denn schon einen Lösungsansatz für die fröhliche Zahl?

[edit] ein Dreizeiler? na dann lass ich mal überraschen ;)[/edit]
 
Zuletzt bearbeitet:

WI'ler

Mitglied
Mit der Fachrichtung Informatik liege ich schon richtig, wobei ich Wirtschaftsinformatik studiere.

Mir macht es bloß keinen Spaß beim Lernen solche unnützigen Funktionen programmieren zu müssen. Ich habe es lieber, wenn es praxisbezogen ist, was mir auch das Lernen erleichtert. Deshalb hatte ich mich auch entschlossen an einer FH zu studieren und nicht an der Uni.

Die String-Methode finde ich nicht so toll, da es nicht dafür gedacht ist. Außerdem dürfen wir während der Klausur nicht auf die JAVA-Klassenbibliothek zurückgreifen.

Mit weniger Platz war wirklich der kleine Spalt auf dem Zettel gemeint, der für die Lösung ausdienen soll. Dieser Platz soll wirklich ausreichend sein (andernfalls würde ein Hinweis daneben stehen, dass wir ein Zusatzblatt dafür zur Verfügung haben).

Ich setze mich mal wieder ran. Mal sehen, was ich sonst noch Schönes zusammenstellen kann.
 
P

Pippl

Gast
Deine Methode [c]summeDerZiffernquadrate(int n)[/c] ist nicht korrekt. So wird bspw für die Zahl [c]111[/c] die als Summe der Ziffernquadrate
Code:
3
zurückliefern sollte, von deiner Methode
Code:
122
returned.

Du hast Recht die Methode ist nicht richtig, aber dein Ergebnis auch nicht ;)
Java:
        n = n % 10;
        ergebnis = ergebnis + n * n;
Hast du vergessen noch dazu zu rechnen, also zu den
Code:
122
noch
Code:
144 * 144
Aber das nur nebenbei .. zu deiner Lösung ist nicht hinzuzufügen, funktioniert ja fürs erste und man kann sich davon langsam an eine andere Lösung rantasten.

Die String-Methode finde ich nicht so toll, da es nicht dafür gedacht ist. Außerdem dürfen wir während der Klausur nicht auf die JAVA-Klassenbibliothek zurückgreifen.

Verwende doch atm die String Methode um dich an eine Lösung ohne den nicht erlaubten Methoden/Klassen heranzutasten.
 

WI'ler

Mitglied
Ich habe jetzt ziemlich lange gegoogelt und die meisten sind sich einig, dass es 3 Algorithmen gibt, die sich anbieten würden.

1) String-Methode - gefällt mir persönlich nicht, da wie schon von meinem Vorredner gesagt, kein guter Programmierstil
2) %10 & /10 - hab ich ja versucht, muss ich ausbessern
3) Logarithmus 10 - gefällt mir am besten, leider mit JKB.

Java:
int wert = 12345;
 
// hier noch wert = 0 abfangen! ...
 
// Länge des Integerwertes.
int d = (int) Math.log10( Math.abs(wert) ) + 1;
 
// Rückgabearray mit den einzelnen Ziffern.
int[] ziffern = new int[d];
 
while (wert != 0)
   {
   ziffern[--d] = wert % 10;
   wert /= 10;
   }
 
// ziffern[0] = 1
// ziffern[1] = 2
// ziffern[2] = 3
// ziffern[3] = 4
// ziffern[4] = 5
 
P

Pippl

Gast
3) Logarithmus 10 - gefällt mir am besten, leider mit JKB.

Java:
// Länge des Integerwertes.
int d = (int) Math.log10( Math.abs(wert) ) + 1;

Eine andere Möglichkeit die Länge des int werte zu bekommen
Java:
            boolean lengthFound = false; //flag um die schleife abzubrechen
            int number = 1003423; //die zu untersuchende zahl
            int temp = 1; 
            int oldTemp = 0;
            int length = 1; // die aktuelle länge
            while(!lengthFound)
            {
                temp = temp * 10;
                if (number < temp && number >= oldTemp)
                {
                    lengthFound = true;
                }
                oldTemp = temp;
                length++;
            }

[OT]jgh, sorry ich sollte das nächstemal noch weitere 5x nachrechnen :lol: oder genau schauen das % != / [/OT]
 

WI'ler

Mitglied
Ich hab mich entschlossen die String-Methode zu nehmen, da ich auf keine bessere Lösung komme.

Außerdem erleichtert mir diese auch den Teil B) zu lösen. Lösung folgt dann gleich noch.
 

Kevin94

Top Contributor
Algorithmus 2 ist doch mit einer while-Schleife auch sehr einfach zu implementieren:
Java:
public int summeDerZiffernquadrate(int n)
    {
        
        int ergebnis = 0;
        while(n!=0) {
            ergebnis += (n % 10) * (n % 10);
            n /=  10;
        }
        return ergebnis;
    }

Funktioniert natürlich nur bei Ganzzahlen und nicht bei
Code:
double
's richtig.
 

WI'ler

Mitglied
Ich habe es so gelöst:

Java:
class multierg {
    
    public static void main(String[] args) {
 
        System.out.print(istFroehlicheZahl(99));
 
    }
    
    public static boolean istFroehlicheZahl(int n) {
 
        int ergebnis = 0;
        String result = "";					// Aufzählung aller Ergebnisse
        String check = "41637588914542204"; // sich wiederholender String bei nichtfröhlichen Zahlen
        String help = n + "";				// Konvertierung von n in String
        boolean tof = false;
        
        while(tof == false && !result.contains(check))	
        	// Wiederholen, solange tof = false | check-String nicht auftaucht
        {
        	ergebnis = 0;
        	for (int i = 0; i < help.length(); i++) {
            	ergebnis += Integer.parseInt(help.charAt(i) + "") * Integer.parseInt(help.charAt(i) + "");    
        	}
        	result = result + ergebnis;
        	help = ergebnis + "";
            if(ergebnis == 1)
            {
            	tof = true;
           	}
        }    
 		System.out.println(result);
        return tof;
    }
}

[EDIT]@Kevin94,

das ist natürlich die elegantere Lösung... werde ich mir jetzt auch nochmal für Teil B) anschauen...[/EDIT]
 
Zuletzt bearbeitet:

Kevin94

Top Contributor
Ich will dich ja nicht nerven: Aber es geht ohne String's zu verwenden wesentlich einfacher und sicherer.
Deine Methode ist imo nicht sicher, da der check-String auch im result-String einer "Fröhlichen Zahl" vorkommen kann, das könnte man aber beheben, indem man die einzelnen Zahlen durch Leerzeichen trennt.

Aber warum schreibst du den Code aus a) nochmal ab, anstatt einfach die Methode zu verwenden (In der Klausur ist das sowieso schlauer, da du dann nicht den selben Fehler zweimal gewertest bekommst). Auserdem würde es den Code wesentlich übersichtlicher machen.

Und wie gesagt: Die Aufgabe lässt sich allein mit den rudimentären Operatoren/Konstrukten lösen und so wie du es angedeutet hast, ist diese Aufgabe eingentlich auch dazu gedacht so gelöst zu werden.

[EDIT]Ah ja, gut so.[/EDIT]
 

Kevin94

Top Contributor
Ohne String?
Egebnis mit der Methode in a) ausrechnen, in Hilfsvariable speichern und dann auf 1 oder 4 vergleichen wenn's keins davon ist eben per Rekursion das ganze von vorne mit dem Zwischenergebnis.

Hoffe das ist verstänlich, will jetzt nicht gleich den Code posten, ist aber wirklich in wenigen Zeilen lösbar (auch in einer, das wäre dann aber auch Spagetti Code), was jgh auch bestätigen kann.
 

WI'ler

Mitglied
In dem Fall finde ich es überflüssig/umständlich, weil der Code an sich schon kurz ist. :pueh:

Vielen Dank für die Unterstützung und bis zur nächsten problematischen Aufgabe. :shock:

Endgültige Lösung: :toll:

Java:
public static boolean istFroehlicheZahl(int n) {
 
        int ergebnis = n;
        String result = "";                 // Aufzählung aller Ergebnisse
        String check = "41637588914542204"; // sich wiederholender String bei nichtfröhlichen Zahlen
        boolean tof = false;
        
        while(tof == false && !result.contains(check))  
            // Wiederholen, solange tof = false | check-String nicht auftaucht
        {
            n = ergebnis;
            ergebnis = 0;
            while(n!=0) 
            {
            	ergebnis += (n % 10) * (n % 10);
            	n /=  10;
        	}
            result = result + ergebnis;
            if(ergebnis == 1)
            {
                tof = true;
            }
        }    
        System.out.println(result);
        return tof;
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Erste Schritte Fröhliche und traurige Zahlen Java Basics - Anfänger-Themen 3
K Fröhliche Zahlen Java Basics - Anfänger-Themen 11
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
B Überprüfung dass Zahl nur aus 0,1 besteht Java Basics - Anfänger-Themen 2
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
B 49-bit-zahl mit genau 6 Einsen bauen? Java Basics - Anfänger-Themen 21
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
M Java Ausgabe der höchsten Zahl Java Basics - Anfänger-Themen 14
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
M zahl raten Java Basics - Anfänger-Themen 1
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
I Zahl aufrunden (Zeit) Java Basics - Anfänger-Themen 43
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
TanTanIsTrying Durschnitt berechnen von eingegebener Zahl bis 1 heruntergezählt Java Basics - Anfänger-Themen 9
R Fortlaufende Zahl Java Basics - Anfänger-Themen 3
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
HelpInneed Zahl. Java Basics - Anfänger-Themen 2
R Perfekte Zahl Java Basics - Anfänger-Themen 8
D Mittlerste Zahl Java Basics - Anfänger-Themen 17
D Grösste Zahl in einer Folge herausfinden. (ULAM) Java Basics - Anfänger-Themen 9
Poppigescorn Häufigkeit einer zahl zählen Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
J Verdoppeln einer Zahl (in dem Fall Münzen) Java Basics - Anfänger-Themen 4
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
K Wie kontrolliere ich ob ich die Zahl in meinem Array schon hab? Java Basics - Anfänger-Themen 9
T Zahl in Array ersetzen Java Basics - Anfänger-Themen 2
Abraham42 Prozentsatz einer Zahl mehrmals Java Basics - Anfänger-Themen 2
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
Kingamadeus2000 Anzahl der Ziffern der kürzesten Zahl aus einem zurückliefern Java Basics - Anfänger-Themen 1
V Beliebige Dreistellige Zahl Teiler finden Java Basics - Anfänger-Themen 4
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
S Zahl eingeben Java Basics - Anfänger-Themen 8
A Java . punkt neben einer Zahl. Java Basics - Anfänger-Themen 1
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
J Die größte Zahl anzeigen Java Basics - Anfänger-Themen 19
V Array auf eine Zahl durchsuchen Java Basics - Anfänger-Themen 15
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
L Erhöhung der Zahl Java Basics - Anfänger-Themen 3
F Negative Zahl erzwingen Java Basics - Anfänger-Themen 3
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
T Eulersche Zahl e Java Basics - Anfänger-Themen 5
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G Programm schreiben: Zahl (n) eingeben, 1+1/n+2/n+3/n+....+n/n Java Basics - Anfänger-Themen 8
B Eine ganze Zahl zerlegen. Java Basics - Anfänger-Themen 4
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
H Harshad-Zahl (Nivenzahl) und Palindrom überprüfen Java Basics - Anfänger-Themen 2
I Wie viele 1 an Bits hat die Zahl x? Java Basics - Anfänger-Themen 5
A Gewürfelte Zahl ausgeben Java Basics - Anfänger-Themen 10
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
A Überprüfen, ober eine Zahl Ziffer enthält Java Basics - Anfänger-Themen 12
O Markoff-Zahl Java Basics - Anfänger-Themen 22
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
L 10-Stellige Zahl hochzählen lassen Java Basics - Anfänger-Themen 1
H String und Zahl Java Basics - Anfänger-Themen 10
R Zahl 1 bis 100 erraten Java Basics - Anfänger-Themen 12
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
H Würfelspiel, stop bei gleicher Zahl Java Basics - Anfänger-Themen 4
B Array - die Häufigkeit der Zahl zählen Java Basics - Anfänger-Themen 9
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
I Eulersche Zahl Java Basics - Anfänger-Themen 6
F Produkt d. Ziffern einer Zahl..?! Java Basics - Anfänger-Themen 5
J Die Zahl herausfinden die durch 2 - 30 Teilbar ist... Java Basics - Anfänger-Themen 17
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
A Rechnen mit Text und Zahl Java Basics - Anfänger-Themen 4
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
C Erste Ziffer einer Zahl Java Basics - Anfänger-Themen 46
M Zeilenumbruch ab der 10. Zahl Java Basics - Anfänger-Themen 11
T Input/Output Int Eingabe auf Zahl überprüfen Java Basics - Anfänger-Themen 30

Ähnliche Java Themen


Oben