Blue J Potenzen ausgeben
Hey ich versuche gerade für die Schule in Blue J zu programmieren. Es sollen die Potenzen gerader Zahlen ausgegeben werden.
Habe nun 2 Probleme :
-
wie mache ich das mit den Potenzen ?
-
was ist die richtige Eingabe für die Einschränkung gerader Zahlen ( if / Else Funktion ist mir klar nur das Wort " gerade " macht mir da Probleme .
Wäre toll wenn mir jemand weiter helfen könnte
Danke schon mal !
3 Antworten
Hier drei verschiedene Möglichkeiten dafür. Wenn du sie nicht über die main-Methode aufrufst, dann kannst du das static entfernen bei den Methoden.
public class Pewpow {
public static void main(String[] args) {
System.out.println("Bibliothek: " + pot(2, 3) + " rekursiv: "+ rekPot(2, 3) + " iterativ: " + itPot(2, 3));}
// mit Bibliotheksmethode
public static int pot(int number, int potenz) {
if(number%2 != 0) {return -1;}
return (int) Math.pow(number, potenz);}
// rekursiv
public static int rekPot(int number, int potenz) {
if(number%2 != 0) {return -1;}
if (potenz == 1) {
return number;}
else {return rekPot(number, potenz - 1) * number;}
}
// iterativ
public static int itPot(int number, int potenz) {
if(number%2 != 0) {return -1;}
int p = number;
for (int i = potenz; i > 1; i--) {
p *= number;
}
return p;}
}
Verbesserte Version: (Werte-Bereich von int war zu klein)
Kannst nun auch in der main Methode 2 Zahlen eingeben und die werden dann berechnet. Erst die Zahl, dann die Potenz.
public class Pewpow {
public static void main(String[] args) {
try {
double pot = Double.parseDouble(args[0]);
double num = Double.parseDouble(args[1]);
System.out.println("Bibliothek: " + pot(num, pot));
System.out.println("rekursiv: " + rekPot(num, pot));
System.out.println("iterativ: " + itPot(num, pot));}
catch (NumberFormatException nfe) {
System.out.println("Eingabe-Fehlerhaft. Keine Zahl!");}
catch (NullPointerException npe) {
System.out.println("Eingabe leer. Bitte Zahlen eingeben");}
}
// mit Bibliotheksmethode
public static double pot(double number, double potenz) {
if(number%2 != 0) {
return -1;
}
return Math.pow(number, potenz);
}
// rekursiv
public static double rekPot(double number, double potenz) {
if(number%2 != 0) {return -1;}
if (potenz == 1) {
return number;
} else {
return rekPot(number, potenz - 1) * number;}
}
// iterativ
public static double itPot(double number, double potenz) {
if(number%2 != 0) {return -1;}
double p = number;
for (double i = potenz; i > 1; i--) {
p *= number;
}
return p;
}
}
Eine gerade Zahl hat keinen Rest, wenn durch 2 geteilt wird: Sprich Modulo 2
if ( (zahl % 2) == 0) // dann ist sie gerade
Das mit der Potenz verstehe ich gerade nicht, wie das gemeint ist.
Mach mal ein Beispiel dafür.
Ich glaube er meint das er nicht weis wie man eine Potenz aufschreibt. Also ich kenn mich da nicht aus aber vieleicht zahl^potenz oder so
Ja genau ! Danke erstmal das mit der geraden zahl hat mir schon mal geholfen.
Man soll eine zahl eingeben können und dann als rückgabewert dir potenz erhalzen. Das soll dann aber nur bei geraden zahlen funktionieren....
aber was meinst du mit Potenz? Zur Basis 2 evtl? Oder 10?
Achso ja ich merke gerade dass ich mich echt Falsch ausgedrückt habe . Ich meine die Zahl mit sich selbst multiplizieren , sorry
Probiere mal sowas:
public int quadrieren(int zahl){
if ( (zahl % 2) == 0){
return zahl*zahl;}
else return -1;
}
Ist Info für euch Pflichtfach? Wenn nein, dann hast du das falsche Pferd gewählt.
Wenn es keine Gerade zahl ist wird -1 zurückgegeben. Kannst du aber nach belieben anpassen.
Bei fragen zu den Methoden, schreib einfach ;)
Du kannst da theoretisch jede (gerade) Zahl zur beliebigen Potenz ausrechnen, aber bei großen Werten kann es länger dauern... Wäre mal interessant welche Methode am langsamsten ist...
Kontrollabfrage ob gerade oder nicht: