Liebe Leser,
Wenn dies Ihr erster Besuch hier ist, lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Sie müssen sich vermutlich registrieren, bevor Sie Beiträge verfassen können. Klicken Sie rechts auf 'Jetzt registrieren.', um den Registrierungsprozess zu starten.
Ergebnis 1 bis 3 von 3

Thema: Java-Problem

  1. #1
    Registriert seit
    11.2007
    Beiträge
    32

    Java-Problem

    Hi Leute,

    ich habe hier ein schönes Problem für euch. Der Code unten funktioniert nicht so ganz wie er soll. Zweck ist, eine Wurzel mit Hilfe von Intervallschachtelung auf 10 Stellen zu berechen (Infos zur Mathetheorie: hier). Wie der Code genau funtioniert (oder funktioneren sollte), steht in den Kommentaren. Nur noch ein paar kleine Infos:
    Wie sich vielleicht erahnen lässt, ist der Code für ein "Algorithmustestsystem" geschrieben. Die Methode bereiteVor() stellt lediglich alle benötigten Daten bereit. starte() ist der eigentliche Algorithmus.
    Wer das Ganze testen will, entfernt einfach das extends TestAlgorithmus und ersetzt "testSys.schreibeLog" durch "System.out.print".

    Code:
    import algorithmustest.*;
    
    public class IntervallWurzel extends TestAlgorithmus {
    
        private double wurzel;
        private double radikand;
        private int stellen[] = new int[10]; // [0] vor Komma, der Rest danach
        private int wurzelExponent;
        
        public void bereiteVor() {
            radikand = 100*Math.random();
            testSys.schreibeLog("Aktueller Radikand: " + String.valueOf(radikand) + "\n");
            
            wurzelExponent = (int) Math.round(4*Math.random()+1);
            testSys.schreibeLog("Aktueller Wurzelexponent: " + String.valueOf(wurzelExponent) + "\n");
        }
        
        public void starte() {
            for(int stelle=0; stelle<10; stelle++) { //Auf 10 Stellen genau berechnen
                double temp=0.0;     // der bisher berechnete Wert
                for(int j=0; j<=stelle-1; j++) {
                    if(j==0) {
                        temp = stellen[j];
                    } else {
                        temp += stellen[j]/(j*10);  // <-- Dieser Teil will nicht
                    }
                }
    
                // temp erhöhen und prüfen, ob die stelle gefunden
                for(int i=0; i<9; i++) {
                    if(stelle==0) {
                        temp = i;
                    } else {
                        temp+=i/(stelle*10);   // <-- Dieser auch nicht
                    }
                    
                    
                    if(Math.pow(temp,wurzelExponent)>radikand) {
                        stellen[stelle]=i-1;
                        break;
                    }
                    stellen[stelle]=9;
                }
    
                // nur für's Debugging
                testSys.schreibeLog("temp: " + temp + "\t");
                testSys.schreibeLog("Stelle " + stelle + ": " + stellen[stelle] + "\n");
            }
            testSys.schreibeLog("\n");
    
            // Nur noch Textformation
            String nachkommastellen="";
            for(int i=1; i<=9; i++) {
                nachkommastellen += String.valueOf(stellen[i]);
            }
            testSys.schreibeLog("Wurzel: " + String.valueOf(stellen[0]) +"," + nachkommastellen + "\n");
        }
    }
    Haupziel soll es sein, diesen Code zum laufen zu bringen. Sonstige Kritiken können natürlich auch mitgeteilt werden, aber wenn, dann konstruktiv.

    Danke

  2. #2
    Avatar von daboom
    daboom ist offline Megabyte
    Mein System
    MainboardASUS P8P67 Pro
    ProzessorIntel Xeon 31230 (Scythe Mugen 3)
    GrafikkarteMSI Radeon HD7850
    RAM2x 4096 MB 1333 Teamgroup Elite
    Festplatte(n)2x WD Caviar Blue 500 GB
    Andere Laufwerke1x Asus DRW-24B3ST
    Netzteil (inkl. Spannungswerte)be quiet Straight Power E9 CM 580 W
    Soundkarte7.1 onBoard
    BetriebssystemWindows 7 Professional 64 Bit SP1 * Ubuntu Desktop 12.04 64 Bit
    AV-SoftwareAvira * N/A
    FirewallWindows * netfilter/iptables
    System-/OptimierungstoolsIs immer so die Frage, was mit Süstehmtuhls gemeint ist...
    Art des InternetzugangsUMTS
    MonitorSamsung Synchmaster 226CW * Acer AL1721
    SonstigesAntec Three Hundred Two
    Registriert seit
    09.2007
    Ort
    Zammwehr deirecktlie in Machtestadt
    Beiträge
    2.178
    Erstmal grundsätzlich folgendes:

    1. Die (imo zufällige) Mischung von funktionslokalen und objektlokalen Variablen vermindern die Lesbarkeit und das Verständins ungemein. Bis auf "radikand" und "wurzelexponent" kann doch alles als Variable der "starte()" methode genutzt werden, oder?

    2. Was hat "wurzelExponent" für einen Sinn? Das soll doch sicherlich die Zahl sein, mit der Du die jeweiligen Quadrate testest, oder? Die sollte dann natürlich nicht zufällig gewählt (wird bei der Erklärung bei Wiki ja auch nicht getan) sondern von 1 bis ... durchgetestet werden.

    So, nu haste erstmal was zum drüber nachdenken...
    Geändert von daboom (Morgen um 25:03 Uhr).

  3. #3
    Registriert seit
    11.2007
    Beiträge
    32
    Ok, ich verga&#223; zu erw&#228;hnen das nicht nur die zweite sondern jede beliebige Wurzel gezogen werden k&#246;nnen. Um verschiedene zu testen, werden verschiedene generiert (zwischen 2 und 5, um das mal einzuschr&#228;nken).

    Was die Variablen angeht, hast du vollkommen recht. Sie sollten sogar da stehen, da sie ja Teil des zu testenden Algorithmus sind. Werde das verbessern und im ersten Post editieren.

    Danke schon mal

    e:

    Ok, das mit dem 1. Post editieren geht hier wohl nicht, warum auch immer.
    Ich habe jetzt mal aufger&#228;umt.
    Das Problem bleibt das gleiche (wie erwartet).

    Code:
    import algorithmustest.*;
    
    public class IntervallWurzel extends TestAlgorithmus {
    
        private double radikand;
        private int wurzelExponent;
        
        public void bereiteVor() {
            radikand = 100*Math.random();
            testSys.schreibeLog("Aktueller Radikand: " + String.valueOf(radikand) + "\n");
            
            while(wurzelExponent<=2) {
                wurzelExponent = (int) Math.round(5*Math.random());
            }
            testSys.schreibeLog("Aktueller Wurzelexponent: " + String.valueOf(wurzelExponent) + "\n");
        }
        
        public void starte() {
            double wurzel;
            int stellen[] = new int[10]; // [0] vor Komma, der Rest danach
    
            for(int stelle=0; stelle<10; stelle++) { //Auf 10 Stellen genau berechnen
                double temp=0.0;     // der bisher berechnete Wert
                for(int j=0; j<=stelle-1; j++) {
                    if(j==0) {
                        temp = stellen[j];
                    } else {
                        temp += stellen[j]/(j*10);  // <-- Dieser Teil will nicht
                    }
                }
    
                // temp erh&#246;hen und pr&#252;fen, ob die stelle gefunden
                for(int i=0; i<9; i++) {
                    if(stelle==0) {
                        temp = i;
                    } else {
                        temp+=i/(stelle*10);   // <-- Dieser auch nicht
                    }
                    
                    
                    if(Math.pow(temp,wurzelExponent)>radikand) {
                        stellen[stelle]=i-1;
                        break;
                    }
                    stellen[stelle]=9;
                }
    
                // nur f&#252;r's Debugging
                testSys.schreibeLog("temp: " + temp + "\t");
                testSys.schreibeLog("Stelle " + stelle + ": " + stellen[stelle] + "\n");
            }
            testSys.schreibeLog("\n");
    
            // Nur noch Textformation
            String nachkommastellen="";
            for(int i=1; i<=9; i++) {
                nachkommastellen += String.valueOf(stellen[i]);
            }
            testSys.schreibeLog("Wurzel: " + String.valueOf(stellen[0]) +"," + nachkommastellen + "\n");
        }
    }
    Geändert von psychofreak (13.04.2010 um 18:05 Uhr) Grund: Aktualliesierung

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
12
Content Management by InterRed