Wieso funktioniert dieser simple Code nicht?

moccajoghurt

Bekanntes Mitglied
Hi, habe eine Aufgabe meines Java-Kurses bearbeitet und eigentlich müsste sie meines Wissens nach gelöst sein... anscheinend habe ich aber einen Fehler im Code, den ich einfach nicht finden kann. Normalerweise würde ich nicht so etwas fragen, aber ich habe wirklich mind. eine Stunde überlegt und den Fehler nicht finden können.
Die Aufgabe lautet:

Aufgabe 8:
Eine Natürliche Zahl heißt potent, wenn sie sich als Summe von Potenzen (>= 1) ihrer Ziffern darstellen lässt. Beispielsweise ist 24 wegen 2^3 + 4^2 = 24 potent. Schreiben Sie ein Java-Programm, das alle zweistelligen potenten Zahlen ausgibt.

Mein Lösungsansatz:

Java:
public class potenteZahlen {
	public static void main(String[] args) {
		long x = 99;
		while (x > 9) { // gehe alle Zahlen von 99-10 durch
			long ziffer1 = 0;
			long ziffer2 = 0;
			ziffer1 = x % 10; // erzeuge Ziffer1
			ziffer2 = (x/10) % 10; // erzeuge Ziffer2
			if (potent(ziffer1, ziffer2, x)) { // ist Zahl potent?
				System.out.println(x); // zeige Zahl
				}
			x--;
		}
	}	
	static boolean potent(long ziffer1, long ziffer2, long zahl) {
		long a = ziffer1;
		long b = ziffer2;
		for (int x = 1; x <=9; x++) { // potenziere die Ziffer 9 mal
			if (x != 1) { // bei Ziffer^1 keine Potenzierung
			ziffer1*=a; // Ziffer1 * Ziffer1 * ....
			}			
			for (int y = 1; y <=9; y++) { // potenziere die Ziffer 9 mal
				if (y != 1) { // bei Ziffer^1 keine Potenzierung
				ziffer2*=b; // Ziffer2 * Ziffer2 * ....
				}
				if (ziffer1 + ziffer2 == zahl) { // wenn sich aus den Potenzen Zahl ergibt, dann true
					return true;
				}
			}
		}
		return false;
	}
}
Die Funktion ergibt niemals true. Wo liegt mein Fehler??

Gruß
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Hab jetzt mehrere Methoden zur Berechnung des Problems überlegt, aber es kommt nichts simpels und sehr sinnvolles dabei raus. Auf alle Fälle gehts wohl nicht so einfach, wie du das versuchst :D Geht wohl eher in Richtung Combinatorics (ausser da gäbts eine Formel).
 

XHelp

Top Contributor
Auf den ersten Blick würde ich vermuten, dass du in der potent-Methode am Ende der jeweiligen Schleife ziffer1 und ziffer2 mit a unb b zurückbelegen musst, sonst werden die ja immer größer.
Bau dir paar sysouts rein und guck, warum das Ergebnis nicht hinhaut.
 

XHelp

Top Contributor
Jepp. Vor Zeile 22 gehört noch
Code:
ziffer2=b;
rein und dann funktioniert alles.
Generell stimmt bei dir das Ergebnis, aber da fehlen dennoch ein paar Abbruchbedingungen. for-Schleifen eignen sich dafür nicht wirklich, denn:
mal angenommen du hast die Zahl 55... schon bei 5^3 kommst du auf 125, rechnest aber dennoch weiter und überprüfst sogar die 2. Zahl komplett, obwohl die Summe von 125 und x>=0 nie kleiner sein wird.

Ich hätte es wie folgt gemacht (die Potenzbildung ist ziemlich redundand, deswegen kann es so nicht bleiben, aber der Grundgedanke sollte klar sein):
Java:
public static boolean checkPontent(int number) {
		if ((number>9) && (number<100)) {
			int n2 = number%10;
			int n1 = (number-n2)/10;
			int p1=1;
			int p2;
			while (Math.pow(n1, p1)<=number) {
				p2=1;
				while (Math.pow(n2, p2)<=(number-(Math.pow(n1, p1)))) {
					if (Math.pow(n1, p1)+Math.pow(n2, p2)==number) {
						System.out.println(n1+"^"+p1+" + "+n2+"^"+p2+" = "+number);
						return true;
					}
					if ((n2==0)|| (n2==1)) {
						break;
					}
					p2++;
				}
				if ((n1==0)|| (n1==1)) {
					break;
				}
				p1++;
			}
		}
		return false;
	}

P.S. Klassennamen sollte man groß schreiben
 

Wortraum

Bekanntes Mitglied
Noch ein paar kleine Tips, die Du beherzigen solltest:
1) Parametern sollte man nichts zuweisen.
2) Unnötige Bedingungen wie die, ob eine Zahl 1 ist, machen den Text schwerer nachvollziehbar und blähen ihn auf.
3) Eine Variable mit 0 zu initialisieren und gleich darauf etwas neues zuzuweisen, ist sinnfrei.
4) Eine private Methode sollte privat sein.
5) Statt mit einer While-Schleife zu zählen, sollte man eine For-Schleife verwenden.
6) Ein long ist für eine Ziffer ziemlich hoch gegriffen; das ist aber im Gegensatz zu den anderen Punkten nahezu unwichtig.

Java:
public static void main(String[] args) {
    for (int i = 99; i > 9; --i) {
        int ziffer1 = i % 10;
        int ziffer2 = (i / 10) % 10;
        if (potent(ziffer1, ziffer2, i)) {
            System.out.println(i);
        }
    }
}

private static boolean potent(int ziffer1, int ziffer2, int zahl) {
    int a = ziffer1;
    for (int x = 1; x <= 9; ++x) {
        a *= ziffer1;
        int b = ziffer2; /* das Zurücksetzen fehlte bei Dir */
        for (int y = 1; y <= 9; ++y) {
            b *= ziffer2;
            if (a + b == zahl) {
                return true;
            }
        }
    }
    return false;
}

@XHelp: Die While-Schleifen können auch bei Dir problemlos for-Schleifen sein, und die If-Bedingungen in den While-Schleifen sind deplaziert, weil sich die Bedingung innerhalb der Schleife niemals ändert.
 
Zuletzt bearbeitet:
B

Besucherin88

Gast
Ich hätte noch eine Anmerkung...

[Java=18]for (int x = 1; x <=9; x++) { // potenziere die Ziffer 9 mal
[/Java]
[Java=22]for (int y = 1; y <=9; y++) { // potenziere die Ziffer 9 mal
[/Java]

Setze die Grenze auf 6, das hat folgenden Grund:
Die höchste mögliche Potenz ergibt sich aus der höchsten möglichen Potenz der kleinsten Zahl, welche ihr Ergebnis bei Erhöhung der Potenz ändert. D.h. die höchstmögliche Potenz ergibt sich aus der 2. Gehst du diese durch lässt sich feststellen, dass bei einer Potenz von 7 die Grenze von 100 bereits überschritten wird. Das heißt für dich, dass du beim Schleifendurchlauf von x und y ab dem Wert 7 NIE ein Ergebnis erhalten wirst (außer eventuell mit 0 und 1 als Basis).
 

Wortraum

Bekanntes Mitglied
for-Schleifen machen, imho, nur Sinn, wenn ich vorher den Logarithmus berechne, ansonsten kann ich mir da nichts sinnvolles vorstellen.
Wieso den Logarithmus? Deine While-Schleifen machen auch nichts anderes als hochzuzählen, nur daß man am Anfang für die Initialisierung von p1 sorgen und am Ende p1 hochzählen muß – also genau das, wofür man normalerweise eine For-Schleife verwendet.
Java:
for (int p1 = 1; Math.pow(n1, p1) <= number, ++p1) { … }
Wenn man möchte, kann man das zwar mit der While-Schleife machen, aber daß eine For-Schleife dafür ungeeignet sei, ist falsch.
 

XHelp

Top Contributor
achso. ja gut, war dann ein Denkfehler von mir.
Und warum Logarithmus: weil man da bestimmen kann, bis zur welcher Potenz man gehen muss, z.B.:
56
nehmen wir 5:
log_5(56)=2.5 (gerundet)
als braucht man die 5 nur bis zum exponent <=2 untersuchen, denn ab da wird das Ergebnis größer (5^3=125)
Bei der 2. Schleife genau das gleiche, nur dass man da als Logarithmand den Rest nimmt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
B Wieso funktioniert dieser Vergleich nicht? Java Basics - Anfänger-Themen 3
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
G Wieso funktioniert dieses Programm nicht? Java Basics - Anfänger-Themen 6
S OOP Die Methode funktioniert, aber wieso? Java Basics - Anfänger-Themen 2
T Objektorientierte Programmierung - Kein Plan wieso das nicht funktioniert! Java Basics - Anfänger-Themen 6
A Erste Schritte Wieso funktioniert diese Klasse nicht Java Basics - Anfänger-Themen 11
R Wieso funktioniert dieses Array nicht? Java Basics - Anfänger-Themen 13
X Stack mit Oberklasse, wieso funktioniert es nicht? Java Basics - Anfänger-Themen 8
E Wieso funktioniert Boolean.parseBoolean(s) nicht? Java Basics - Anfänger-Themen 9
C Wieso funktioniert das Array nicht? Java Basics - Anfänger-Themen 10
D array.toString() wieso funktioniert es nicht Java Basics - Anfänger-Themen 4
U Anfänger Frage - Ausgabe funktioniert nicht - Wieso? Java Basics - Anfänger-Themen 10
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
C Objekt1.equals(Objekt2) = immer false. Wieso? Java Basics - Anfänger-Themen 22
A Wieso bekomme ich hier zwei unterschiedliche Ausgaben? Java Basics - Anfänger-Themen 6
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
H Datentypen 64 Bit passt in 32 Bit, wieso? Java Basics - Anfänger-Themen 9
L Input/Output Wieso kommt diese Ausgabe? Java Basics - Anfänger-Themen 12
H Wieso wird mir ein Fehler angezeigt? Java Basics - Anfänger-Themen 5
H Wieso öffnet sich der Texteditor? Java Basics - Anfänger-Themen 6
B Wieso wird die Zeile "column" genannt und die Spalte "line"? Java Basics - Anfänger-Themen 12
B Wieso wird hier so viel als falsch angezeigt? Java Basics - Anfänger-Themen 2
B Wieso gibt er hier nur die ungeraden Zahlen aus? Java Basics - Anfänger-Themen 5
B Wieso gibt das Programm in der Console kein Ergebnis aus? Java Basics - Anfänger-Themen 2
A Wieso charAt(0) + charAt(3) = INT-Wert? Java Basics - Anfänger-Themen 5
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
P Cannot find symbol, wieso? Java Basics - Anfänger-Themen 5
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
T Wieso kann ich das jar file nicht starten? Java Basics - Anfänger-Themen 5
S Wieso wird mein JFrame transparent dargestellt? Java Basics - Anfänger-Themen 5
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
A Wieso übergibt der nicht die bearbeitete txt file Java Basics - Anfänger-Themen 8
Z Lotto-Programm Wieso klappt das? Java Basics - Anfänger-Themen 8
P Compiler-Fehler wieso zeigt der compiler ein else without if? Java Basics - Anfänger-Themen 3
X Connection reset, wieso? Java Basics - Anfänger-Themen 4
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
A Wieso kann ich nicht auf diese Variable zugreifen? Java Basics - Anfänger-Themen 6
A Wieso denn das??? Java Basics - Anfänger-Themen 2
A Wieso erscheinen die Objekte manchmal und manchmal nicht Java Basics - Anfänger-Themen 2
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C Klassen Wieso kein infiniter Regress? Java Basics - Anfänger-Themen 4
M ArrayList - remove() löscht nicht! - weiß nicht wieso! Java Basics - Anfänger-Themen 8
X Wieso mehrere JRE ordner? Java Basics - Anfänger-Themen 8
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
A Wieso wird immer 0 ausgegeben? Java Basics - Anfänger-Themen 4
R Wieso hat ein Konstruktor keinen Rückgabetyp? Java Basics - Anfänger-Themen 6
T JTable wird nicht erzeugt, wieso? Java Basics - Anfänger-Themen 17
S JTable removeRow() IndexOutOfBounceException - wieso? Java Basics - Anfänger-Themen 3
S wieso Fehlermeldung cannot find symbol hier Java Basics - Anfänger-Themen 10
N NumberFormatException, aber wieso? Java Basics - Anfänger-Themen 5
T Wieso kompiliert das? Java Basics - Anfänger-Themen 7
B Erste Schritte Programm kompiliert nicht. Wieso? Java Basics - Anfänger-Themen 14
Luk10 Wieso bricht die Rekursion nicht ab? Java Basics - Anfänger-Themen 3
B Warnung : Dead Code. Aber wieso? Java Basics - Anfänger-Themen 10
W Compiler-Fehler NullPointerException. Aber wieso? Java Basics - Anfänger-Themen 2
C Conways Game of Life / "Waldbrandsimulation": wieso temporäres Hilfs-Array?! Java Basics - Anfänger-Themen 8
R If-Abfrage liefert false zurück, wieso ? Java Basics - Anfänger-Themen 20
K Methode funzt nicht, wieso? Java Basics - Anfänger-Themen 12
H Wieso ist das eine Endlosschleife? Java Basics - Anfänger-Themen 8
R wieso Nullpoint und was mit Events ? Java Basics - Anfänger-Themen 14
R Wieso hänge ich hier in einer Endlosschleife (vermute ich zumindest)? Java Basics - Anfänger-Themen 2
J Wert wird überschrieben, weiß nicht wieso Java Basics - Anfänger-Themen 2
S wieso ist mein Code falsch? Java Basics - Anfänger-Themen 2
A Wieso terminiert das Programm nicht? Java Basics - Anfänger-Themen 4
B Wieso ein Fehler? illegal Starts of expression? Java Basics - Anfänger-Themen 12
radiac Wieso bekomme ich kein Bild drauf??? Java Basics - Anfänger-Themen 13
Hatebreed Keine Datenbankverbindung, wieso? (ClassNotFoundEscpetion) Java Basics - Anfänger-Themen 18
G Wieso enum Declaration nur außerhalb einer Methode möglich? Java Basics - Anfänger-Themen 9
S Wieso funtkioniert das SQL DELETE nicht? Java Basics - Anfänger-Themen 1
K Wieso schaltet meine CheckBox von selbst um ? Java Basics - Anfänger-Themen 31
fill0soph Wieso ist "Minus-Unendlich" == 1? Java Basics - Anfänger-Themen 4
G Wieso werdne die componentne nciht angezeigt Java Basics - Anfänger-Themen 4
B Primzahlen berechnen - Wieso unterschiedliche Java Basics - Anfänger-Themen 3
K Wieso wird "paint" nicht ausgeführt ? Java Basics - Anfänger-Themen 2
F Wieso java.lang.StackOverflowError (minimales programm) Java Basics - Anfänger-Themen 11
G Wieso eine nullpointerexception? Java Basics - Anfänger-Themen 6
G Wieso ist eine String-Übergabe keine by-reference-Zuweisung? Java Basics - Anfänger-Themen 7
K Wieso kommt ne NullPointerException Java Basics - Anfänger-Themen 3
N Wieso final ? Java Basics - Anfänger-Themen 4
H wieso syntax error bei else ? Java Basics - Anfänger-Themen 3
H wieso fehler ? must return a type of int. Java Basics - Anfänger-Themen 4
F Wieso werden Char-Werte wie Zahlen addiert? Java Basics - Anfänger-Themen 5
M Wieso zeichnet es nicht auf den JPanel Java Basics - Anfänger-Themen 7
V Wieso NullPointerException Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben