Aufgabenstellung:
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 ist fröhlich, wenn man bei diesem Vorgehen schließlich auf die Zahl 1 stößt, ansonsten ist sie traurig. Beispielsweise ist 7 eine fröhliche Zahl
Schreiben Sie ein Java-Programm, das alle fröhlichen Zahlen zwischen einer Unter- und einer Obergrenze berechnet und die zugehörigen Folgen ausgibt.
Der Dialog soll folgendermaßen ablaufen:
untere Grenze ein: 5
obere Grenze ein: 30
7 -> 49 -> 97 -> 130 -> 10 -> 1
10 -> 1
13 -> 10 -> 1
19 -> 82 -> 68 -> 100 -> 1
23 -> 13 -> 10 -> 1
28 -> 68 -> 100 -> 1
import java.util.Scanner;
public class GlücklicheZahl2 {
private int counter = 0;
private int[] summenSpeicher = new int[1];
private int zahl;
int summenCounter = 0;
Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
GlücklicheZahl2 zahl = new GlücklicheZahl2();
}
public GlücklicheZahl2() {
/*System.out.print("Zahl? ");
int zahl = scanner.nextInt();*/
System.out.print("untere Grenze? ");
int untereGrenze = scanner.nextInt();
System.out.print("obere Grenze? ");
int obereGrenze = scanner.nextInt();
for (int i = untereGrenze; i <= obereGrenze + 1; i++) {
this.zahl = i;
this.summenSpeicher = new int[1];
createIntArray(i);
}
}
public void rechnung(int[] intArray) {
boolean glücklich = false;
int summe = 0;
for (int i = 0; i < intArray.length; i++) {
summe += intArray[i] * intArray[i];
}
if (summe == 1) {
glücklich = true;
}
if (summenCounter >= summenSpeicher.length) {
int[] tmpArray = new int[summenSpeicher.length + 1];
for (int i = 0; i < summenSpeicher.length; i++) {
tmpArray[i] = summenSpeicher[i];
}
summenSpeicher = tmpArray;
}
summenSpeicher[summenSpeicher.length - 1] = summe;
summenCounter++;
if (glücklich) {
System.out.print(zahl);
for (int i = 0; i < summenSpeicher.length; i++) {
System.out.print(" -> " + summenSpeicher[i]);
}
System.out.println("");
} else {
if (counter < 50) {
counter++;
createIntArray(summe);
}
}
}
public void createIntArray(int x) {
String wert = Integer.toString(x);
char[] wertarray = wert.toCharArray();
int[] intArray = new int[wertarray.length];
for (int i = 0; i < wertarray.length; i++) {
intArray[i] = Character.getNumericValue(wertarray[i]);
}
rechnung(intArray);
}
}