Hallo,
ich versuche derzeit Java zu erlernen mit dem Programmierkus Java von Programmierkurs Java .Noch bin ich bei der imperativen Programmierung und habe da bereits Probleme mit der Rekursion, weshalb ich mehrere Übungsaufgaben durcharbeite.
Die Aufgabenstellung bei der ich Probleme habe ist folgende:
Es sollen mehrere Funktionen implementiert werden:
int getAnzahlZiffern(int zahl);
int getZiffernWert(int zahl, int stelle);
Gibt den Ziffernwert an einer best. Stelle aus (Stelle zählt vonn rechts nach links bei 0 beginnend).
int ersetzeZiffer(int zahl, int stelle, int ziffer);
Eine Ziffer der Zahl "zahl" soll an Stelle "stelle" mit der Ziffer "ziffer" ersetzt werden. Diese Funktion macht mir Probleme, ich war bisher nur in der Lage sie mit einer zusätzlichen Variablen "durchlauf" zu lösen, was aber wohl nicht Sinn der Sache ist. Deswegen denke ich, dass ich noch etwas grundlegendes bei der Rekursion nicht verstanden habe und wäre froh, hier den entscheidenden Tipp zu erhalten.
Quellcode:
public class UEA8 {
static int getBetrag(int zahl){
if(zahl>=0)
return zahl;
else{
return zahl*-1;
}
}
static int getAnzahlZiffern(int zahl){
if(getBetrag(zahl)>0){
return getAnzahlZiffern(zahl/10)+1;
}
return 0;
}
static int getZiffernWert(int zahl, int stelle){
if(stelle>0){
return getZiffernWert(zahl/10, stelle-1);
}
return zahl%10;
}
static int ersetzeZiffer(int zahl, int stelle, int ziffer,int durchlauf){
if(stelle>0){
return ersetzeZiffer( zahl/10, stelle-1, ziffer, durchlauf+1)+(zahl%10)*potenz(10,durchlauf);
}
zahl=zahl/10;
if(zahl>0){
zahl=zahl*10+ziffer;
}else{
zahl=zahl*10-ziffer;
}
return zahl*potenz(10,durchlauf);
}
public static int potenz(int zahl, int pot){
if (pot==0)
return 1;
if (pot>0){
return potenz(zahl, pot-1)*zahl;
}
if (pot<0){
return 1/(potenz(zahl, -pot-1)*zahl);
}
return 0;
}
public static void main(String[]args){
int zahl=IO.readInt("Zahl:");
int stelle=IO.readInt("Die wievielte Ziffer soll ersetzt werden?:");
int ziffer=IO.readInt("Mit welcher Ziffer soll diese Ziffer ersetzt werden?");
System.out.println("Betrag: " +getBetrag(zahl));
System.out.println("Anzahl Ziffern: " +getAnzahlZiffern(zahl));
System.out.println("Diese Ziffer wird ersetzt: "+getZiffernWert(zahl, stelle));
System.out.println("Neue Zahl: " +ersetzeZiffer(zahl, stelle,ziffer, 0));
}
}