Fröhliche Zahlen

Status
Nicht offen für weitere Antworten.
K

karllson

Gast
Hey Leute, erstmal vorweg: Cooles Forum.

Danke für die Möglichkeit mein geistigen Unfug mit eurer Hilfe zu Ordnen.
Ich bin Anfänger in Sachen Java und habe jetzt eine Aufgabe in der UNI, an der ich an nem gewissen Punkt scheitere!

Aufgabe ist:
Pflichtaufgabe 28: Die Dezimalziffern einer natürlichen Zahl n, n ≥ 1, werden einzeln
quadriert und addiert. Anschließend wird mit der entstandenen Summe genauso verfahren.
Die Ausgangszahl n heißt fröhlich, wenn man bei diesem Vorgehen schließlich auf die Zahl
1 stößt, sonst traurig. Beispielsweise ist 7 eine fröhliche Zahl:
7" = 49, 49 = 4" + 9" = 97,... bis irgendwann = 1
Schreiben Sie ein Java-Programm, das alle fröhlichen Zahlen zwischen einer Unter- und
einer Obergrenze berechnet und die zugehörigen Folgen ausgibt

So nun bin ich soweit:

Code:
import java.io.*;

public class test {

 	 public static void main( String[] args ) {
  
    		
    		try {
			System.out.println( "Bitte untere Grenze eingeben:" );
      			BufferedReader in = new BufferedReader(new InputStreamReader( System.in ) );
      			String eingabe = in.readLine();
      			int unteregrenze = Integer.parseInt(eingabe);
			
			System.out.println( "Bitte obere Grenze eingeben:" );			
			BufferedReader in2 = new BufferedReader(new InputStreamReader( System.in ) );
      			String eingabe2 = in.readLine();
      			int oberegrenze = Integer.parseInt(eingabe2);
			
			int startwert = unteregrenze;
			while(startwert >= unteregrenze && startwert <= oberegrenze){
				startwert = ++startwert;
				int zwischenzahlen = startwert-1;
					
					if(zwischenzahlen <= 9){
						int ergebniskleinerzehn = zwischenzahlen*zwischenzahlen;
						System.out.println(zwischenzahlen);
					}
					if(zwischenzahlen <=99 && zwischenzahlen >=10){
						int ersteziffer = (zwischenzahlen/10);
						int zweiteziffer = (zwischenzahlen%10);
						int ergebniskleinerhundert = (ersteziffer*ersteziffer)+(zweiteziffer*zweiteziffer);
						System.out.println(ergebniskleinerhundert);
					}
					if(zwischenzahlen <=999 && zwischenzahlen >=100){
						int ersteziffer1 = (zwischenzahlen/100);
						int zweiteziffer1 = ((zwischenzahlen-(ersteziffer1*100)) / 10);	
						int dritteziffer = (zwischenzahlen-(ersteziffer1*100)-(zweiteziffer1*10));
						int ergebniskleinertausend = (ersteziffer1*ersteziffer1)+(zweiteziffer1*zweiteziffer1)+(dritteziffer*dritteziffer);
						System.out.println(ergebniskleinertausend);
					}	
			}	
			
   		} 
		catch( IOException ex ) {
      			System.out.println( ex.getMessage() );
   	 	}	

  	}
}

Was macht das Skript bis dato? - In erster Linie laufen ohne Fehler. Darüber hinaus fragt es den User nach der Unteren und der Oberen Grenze und Berechnet für alle dazwischen liegenden Zahlen die Summe ihrer (Dezimalziffern zum Quadrat).

Wie ich finde, schonmal nicht schlecht. Ich sitz jetzt nur aufm Schlauch, weil ich nicht weiß, wie ich es hinbekomme, dass falls die Summe nicht 1 (also fröhlich) oder 4(traurig) ist, das Skript eben diese Summe wieder kontrolliert - solange bis 1 oder 4 in der Summe rauskommt.

Muss man hier mit arrays arbeiten? War es bis hier in Ordnung, oder vielleicht viel zu kompliziert?
Bin um jede Hilfe dankbar. Danke für das Lesen!
gruß karllson
 
G

Guest

Gast
Und die 69 ist nicht dabei? Die finde ich immer wieder fröhlich. :D
 

0x7F800000

Top Contributor
@Gast: :autsch:
@OP:
was soll dieser quatsch mit fallunterscheidungen und "ersten, zweiten, zehnten" ziffer? Die dekadische entwicklung kann man ja wohl ein wenig kürzer und wesentlich allgemeiner hinkriegen, siehe bitte die einzeiler-forschleife in "happyIterationStep", der methode, die einem n die summe der quadrate der ziffer zuordnet.

außerdem: ich würde das ein wenig unterteilen, und an paar stellen die eher geeigneten for-schleifen benutzen:
Code:
public class HappyNumbers {

	public static long happyIterationStep(long n){
		long result=0;
		for(long digit; n>0; digit=n%10, n/=10, result+=digit*digit );
		return result;
	}
	
	public static boolean isHappy(long n){
		while(true){
			if(n==1) return true;
			if(n==4) return false;
			n=happyIterationStep(n);
		}
	}
	
	public static String happySequenceToString(long n, boolean isHappy, int maxSteps){
		StringBuilder b=new StringBuilder();
		
		if(isHappy){
			do{
				b.append("->"+n);
				n=happyIterationStep(n);
			}while(n!=1);
		}else{
			for(int i=0; i<maxSteps; i++){
				b.append("->"+n);
				n=happyIterationStep(n);	
			}
			b.append("...(unhappy)");
		}
		return b.toString();
	}
	
	public static void main(String[] args) {
		
		//einlesen, blah blah...
		int start=192837465, end=192837564;
		boolean isHappy;
		
		for(int n=start; n<end; n++){
			System.out.printf("%5d: %b %s\n",n,isHappy=isHappy(n), happySequenceToString(n,isHappy,20));
		}
	}
}
 

karllson

Mitglied
Hey!

Dieser "Quatsch" ist halt das Beste, was mir dazu einfiel. Wie gesagt ich programmieren noch nicht lange mit Java.

Trotzdem aber erstmal Danke! Ich werde dein Code mal durcharbeiten und bin dann hoffentlich etwas schlauer!


Vielen Dank

Gruß
 

0x7F800000

Top Contributor
Hmm, naja, den code (insbesondere diese eine zeile) kann man wohl stundenlang anstarren, ohne schlauer zu werden, wenn man das eigentliche prinzip nicht oder nur schwammig versteht. Spiele ein wenig mit p-adischen entwicklungen herum, schreib dir eine methode, die dir eine p-adische entwicklung zu einer vorgegebenen basis liefert, dann versuche den code auch in deinem programm zu verwenden, und anzupasen, und erst dann kannst du damit anfangen, nach und nach alle unnötigen teile rauszuschmeissen, und den ganzen vorgang letztendlich auf eine zeile reduzieren. Wenn es am anfang 20 zeilen sind, ist es dem compiler eigentlich ziemlich wurscht, hauptsache man versteht, ws da passiert.
 
C

c

Gast
hehe, das sieht so nach prog I tu bs aus ;D sitze auch gerade davor
 

karllson

Mitglied
Hey,
Also hab es soweit mal durchgearbeiten und auch verstanden.

in Public Static long wird n erhöht und die dezimalziffern-summe errechnet.
in Public Static boolean werden dann die Fälle 4 und 1 false und true zugeordnet, solange wie n true ist...
dann wird der String erstellt. Das habe ich alles verstanden.

Ich verstehe nur

Code:
 System.out.printf("%5d: %b %s\n",n,isHappy=isHappy(n), happySequenceToString(n,isHappy,20));

nicht ganz.
Was soll %5d, %b,%s ????
Und wie ist die ganze Zeile zu verstehen?

Mir ist auch erfolgreich gelungen, die obergrenze und untergrenze nach benutzereingabe als start und end zu setzen.

Und Vorallem, wie muss ich das Skript schreiben Damit das Ergebnis in der Form

7 -> 49 -> 97 -> 130 -> 10 -> 1
10 -> 1
13 -> 10 -> 1
ausgegeben wird. Also quasi der boolean wert nicht angezeigt wird. Ich denke ja mal das dies in der "von mir nicht kapierten Zeile" passiert.

Erstmal danke für die schnelle hilfe. Ich hab bis jetzt schon sehr viel gelernt und bin von der Lösung (für mich im kopf) nur sehr wenig entfernt!

Grüße
 

AmunRa

Gesperrter Benutzer
Das ist eine formatierte Ausgabe
das %5d ->heist das er eine dezimal Zahl ausgeben muss in diesem Fall n
%b ist ein boolescher Wert -> isHappy(n);
%s ist ein String -> happySequenceToString(n,isHappy,20);
 

karllson

Mitglied
Ich muss doch da jetzt nur noch ne if -schleife einbauen,dass nicht mehr die false werte ausgegeben werden,

sondern nur die true werte in der form :

7 -> 49 -> 97 -> 130 -> 10 -> 1

Aber ich weiss nicht wo....kann mir da wer helfen. Den Rest habe ich wie gesagt hinbekommen.
Und Dank AmunRa habsch die letzte Zeile auch kapiert ;)

Danke für all die Mühe...
 

AmunRa

Gesperrter Benutzer
Code:
 for(int n=start; n<end; n++){ 
    if (isHappy(n){
     
          System.out.printf("%5d: %b %s\n",n,isHappy=isHappy(n), happySequenceToString(n,isHappy,20)); 
      }
}
So in etwa müsste das dann laufen
 

karllson

Mitglied
Jau, danke, aber das habsch denn eben alleine geschafft...

so sollte das alles eigentlich schon durchgehen.

Wenn ich es jetzt noch schaffe irgendwie nur die Dezimalziffern auszulesen

ohne Zahl: true -> davor, dann binsch noch zufriedener...

Aber für heute erstma kopp ausschalten und morgen wieder ran.

Ich danke euch für eure Mithilfe. Ihr habt ein' gut ;)

Grüße und Danke
Ich geh nen Brot essen!
 

AmunRa

Gesperrter Benutzer
dann musst du bei der Ausgabe einfach nurmehr
System.out.printf("%s\n", happySequenceToString(n,isHappy(n),20));
schreiben
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Erste Schritte Fröhliche und traurige Zahlen Java Basics - Anfänger-Themen 3
W Methoden "Fröhliche Zahl" true | false Java Basics - Anfänger-Themen 14
K Enum Römische Zahlen Java Basics - Anfänger-Themen 6
T Kombination von 3 Zahlen Java Basics - Anfänger-Themen 5
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
M negative Zahlen bei Intervallen Java Basics - Anfänger-Themen 10
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
M 3 Zahlen miteinander vergleichen Java Basics - Anfänger-Themen 18
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
J Operatoren Zahlen addieren Java Basics - Anfänger-Themen 13
B Threads Counter mit ungeraden Zahlen Java Basics - Anfänger-Themen 32
JavaBeginner22 Java 2 Zufalls zahlen generieren. Java Basics - Anfänger-Themen 11
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
D Größtes Palindrom Produkt aus zwei dreistelligen Zahlen Java Basics - Anfänger-Themen 60
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
sserio Befreundete Zahlen Java Basics - Anfänger-Themen 7
AhmadSlack Verzweigungen zahlen multiplizieren Java Basics - Anfänger-Themen 4
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
U Lotto-Zahlen App Java Basics - Anfänger-Themen 34
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
P Zweidimensionales Array als Tabelle mit befüllten Zahlen Java Basics - Anfänger-Themen 10
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
P Drei Zahlen eines Würfelspiels auswerten Java Basics - Anfänger-Themen 7
H Häufigkeit von Zahlen ermitteln Java Basics - Anfänger-Themen 23
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
H Zahlen kürzen Java Basics - Anfänger-Themen 2
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
B Häufigkeit einzelner Zahlen in einem Array Java Basics - Anfänger-Themen 6
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
H Eingegebene Zahlen mit Array ausgeben Java Basics - Anfänger-Themen 18
I 12 Spalten von jeweils 30 Zahlen in Konsole ausgeben Java Basics - Anfänger-Themen 6
R Array mit Unter- und Obergrenze ganze Zahlen dazwischen erscheinen nicht Java Basics - Anfänger-Themen 1
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
mhmt_03 dafür sorgen, dass im JTextfield nur zahlen eingebbar sind Java Basics - Anfänger-Themen 9
Ianatrix Zahlen von a bis b berechnen Java Basics - Anfänger-Themen 7
P Wie kann ich die Zahlen dieses Arrays dividieren? Java Basics - Anfänger-Themen 2
P Nutzer entscheiden lassen, wie viele Zahlen dieser in ein Array eingeben möchte. Java Basics - Anfänger-Themen 6
T Bestimmte Zahlen ausgeben mit einer whilfe Schleife Java Basics - Anfänger-Themen 21
H Alle Geraden zahlen bis 10 ausgeben Java Basics - Anfänger-Themen 11
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
L Mit Zahlen im String rechnen Java Basics - Anfänger-Themen 19
G Java eingelesene Zahlen Java Basics - Anfänger-Themen 2
D Zahlen werden falsch gekürzt :? Java Basics - Anfänger-Themen 27
H Ungerade Zahlen ausgeben von 1 bis 1000 Java Basics - Anfänger-Themen 8
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
V Erste Schritte Taschenrechner mit beliebig vielen Zahlen Java Basics - Anfänger-Themen 5
X Wie kann ich Zahlen in einzelne Zifferne zerlegen? Java Basics - Anfänger-Themen 3
J 10 positive Zahlen eingeben Java Basics - Anfänger-Themen 10
K Rechtsbündige Ausgabe von Zahlen Java Basics - Anfänger-Themen 6
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
M Zahlen erraten Java Basics - Anfänger-Themen 7
E Zahlen von einem Array mit zahlen von zweitem Array vergleichen Java Basics - Anfänger-Themen 27
S Mit nextGaussian() positive Zahlen erzeugen? Java Basics - Anfänger-Themen 39
D auch negative Zahlen sotieren Java Basics - Anfänger-Themen 18
M Warum berechnet mein Primzahlenprog zu hohe Zahlen nicht? Java Basics - Anfänger-Themen 20
W Bell Zahlen Java Basics - Anfänger-Themen 2
H Min und Max von Zahlen Java Basics - Anfänger-Themen 10
der_Schokomuffin Fehler bei Zufallsgeneration von Zahlen Java Basics - Anfänger-Themen 7
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
F Abstand zum Durchschnitt von 5 Zahlen berechnen... Java Basics - Anfänger-Themen 16
Moji Klassen Array Zahlen zu Sternchen (U-Helmich 7.1-4) Java Basics - Anfänger-Themen 5
F Summe aller echten Teiler und Zahlen zurückgeben Java Basics - Anfänger-Themen 1
T Perfekte Zahlen ausgeben Java Basics - Anfänger-Themen 12
F Zahlen im Feld sortieren + Unterprogramm Java Basics - Anfänger-Themen 4
H Zahlen 1-100 Java Basics - Anfänger-Themen 2
H Einlesen von Zahlen Java Basics - Anfänger-Themen 20
O Problem gleiche Zahlen Java Basics - Anfänger-Themen 2
V Hilfe Aufgabe Zahlen Java Basics - Anfänger-Themen 9
J Zahlen addieren Java Basics - Anfänger-Themen 12
P Schlüsselworte Zählen und Zuweisen von eingelesenen Zahlen Java Basics - Anfänger-Themen 1
D Irgendwelche Ideen um Zahlen Reihenfolgen zu analyisieren Java Basics - Anfänger-Themen 16
CptK Datentypen Zahlen Java Basics - Anfänger-Themen 2
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
Y kann jemand die Terme mit Zahlen schreiben ?? Java Basics - Anfänger-Themen 4
A Ein Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
E LMC (Assembler) Sortieren von 3 Zahlen Java Basics - Anfänger-Themen 4
x-tshainge Zahlen Buchstaben zuordnen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben