Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
könnt ihr mir vielleicht sagen, wieso ich die Fehlermeldung cannot find symbol hier bekomme, obwohl die Variable,die die Methode zurückgeben soll in der richtigen Methode steht und vorher definiert wurde??
Z.31 ist das Problem
Java:
class Logarithmus {
public static void main (String [] args){
System.out.println(check(25.0,36.0));
}
public static double check(double x, double b){
double ug = 1.0;
double og = x;
double ergebnis = 0.0;
if (x == 1.0){
return 0;
}
else {
while (ergebnis != x){
double test = (ug + og)/2.0;
ergebnis = Math.pow(b,test);
if(ergebnis>x){
og = test;
}
else{
ug = test;
}
}
return test;
}
}
}
Viele Grüße
(Achja, es geht um eine selbsterstellte Methode zur Logarithmusberechnung. Habe sie hier mal check genannt, um ihr nicht den gleichen Namen wie der Klasse zu geben,wollte das Thema noch bearbeiten und den namen ändern, aber das geht iwie nicht mehr.)
Du initialisierst die Variable test im else-Zweig, d.h. test ist nur dann auffindbar, wenn der Programmablauf in den else-Zweig kommt. Falls nicht, wird sie nicht gefunden.
wenn du einmal [c]double test = [/c] irgendwo stehen hast, darfst du im selben scope nicht nochmal [c]double test = [/c] stehen haben, da nutzt du einfach [c]test = [/c]
Nachtrag: Der komplette else-Zeig ist übrigens nicht nötig. Falls die if-Bedingung zutrifft, kommt er an ein return und verlässt die Methode. Falls nicht, macht er hinter dem if weiter. Also kannst du deinen Code auch ohne else-Zweig direkt hinter das if-Konstrukt setzen, dann wird's auch schon gleich übersichtlicher mit den Blöcken und Scopes.
Das ist doch jetzt so wie ihr meint oder? Aber es geht trotzdem nicht.
Java:
public static double check(double x, double b){
double ug = 1.0;
double og = x;
double ergebnis = 0.0;
double test;
if (x == 1.0){
return 0;
}
else {
while (ergebnis != x){
test = (ug + og)/2.0;
ergebnis = Math.pow(b,test);
if(ergebnis>x){
og = test;
}
else{
ug = test;
}
}
return test;
}
}
}
Das return test muss ja im else-Block stehen, da nur test zurückgegeben werden soll, wenn die else Bedingung erfüllt ist. Andernfalls bei if wird 0 zurückgegeben.
Ok,wenn man das else weglassen kann, das wusste ich nicht. Aber ändern tuts ja leider noch nichts.
danke, jetzt kommt keine Fehlermeldung mehr. Ich weiß zwar nicht warum, denn die Variable wurde ja zuvor innerhalb der Methode auch noch mit einem Wert belegt, und ich dachte eine Variable, die in einer Methode definiert ist oder ihr übergeben wurde ist in der kompletten Methode verfügbar/wird erkannt, egal ob in einer Schleife, Verzweigung oder sonstiges,wenn man auf die Reihenfolge achtet. Habe ich aber ja auch gemacht... komisch
brauche nur noch eine bessere abbruchbedingung, weil die schleife gerade endlos durchläuft, denke aber dass ich das alleine hinkriege.
Hier ist die Lösung. Methode funktioniert aber nur für positive Exponenten der basis b, wenn b hoch exponent gleich x ergeben soll.
Java:
class Logarithmus {
public static void main (String [] args){
System.out.println(logarithmieren(8.0,2.0));
}
public static double logarithmieren(double x, double b){
double ug = 1.0;
double og = x;
double ergebnis = 0.0;
double test = 0.0;
if (x == 1.0){
return 0;
}
while (Math.abs(ergebnis-x)>=0.0000000000000000000000000000000000000000001){
test = (ug + og)/2.0;
ergebnis = Math.pow(b,test);
if(ergebnis>x){
og = test;
}
else{
ug = test;
}
}
return test;
}
}
Danke für die Hilfe
[EDIT]Also x muss hier größer b sein,sonst funktionierts nicht.[/EDIT]