String returnen an eine DialogKlasse...

Terry12

Aktives Mitglied
hi, ich soll folgendes Programm schreiben :
EIne Funktion die berechnet : a^3 + b^3 = c^2

also zB 1^3 + 2^3 = 2^2

das ist mein Ansatz:

Code:
public static void matheformel(double MAX)
    {
        double a, b, c;
        double ahochdrei, bhochdrei, cquadrat;
        

        assert grenze>=0 : "Obere Schranke muss größer oder gleich Null sein.";
        assert (grenze< Double.MAX_VALUE) : "Die Zahl muss im Double - Bereich liegen.";


        for (a=1; a <grenze; a++){
            ahochdrei = (a*a*a);
            for ( b=1; b<grenze; b++) {
                bhochdrei = (b*b*b);
                for ( c=1; c<grenze; c++) {
                    cquadrat = c*c;
                    if ( ahochdrei + bhochdrei == cquadrat && a <= b) {
                        System.out.println("a= " +a+ ", b= " +b+ ", c= " +c);
                        
                    }
                }
            }
        }     
        
    }
Nun soll ich die Lösung (a,b,c) in einem String an eine Dialog-Klasse übergeben die mir die Lösung eben ausgeben soll... ( Hier in der Berechnung darf ich ja nicht System.out.println benutzen da es z:B keine GUI ist..) nun meine Frage wie mach ich das? Die Variablen sind ja nur innerhalb der for Schleife gültig oder?
und kann mir jemand erklären wie ich allgemein einen String übergeben zB an eine andere Methoden-Klasse? dann müsst es glaub ich public static string heißen oder?
und meine DialogKlasse wo die Ausgabe übergeben werden soll hat auch nur den typ "void" wie soll ich das also machen?
 
Ich verstehe nicht ganz, was du da machst?!

Java:
public int berechne(int zahl1, int zahl2){
  return Math.sqrt(Math.pow(zahl1, 3) + Math.pow(zahl2, 3));
}

rufe die Methode auf mit:

Java:
int a = 10;
int b = 5;
int c;

c = berechne(a, b);
 
hm jetzt versteh ich nicht so ganz was du da machst 😀

also wir sollen static methoden benutzen.
wenn ich das richtig verstanden habe berechnest du die quadratwurzel von zahl1 ^3 + zahl2^3
in einer methode und das ergebnis bekommt c , hm ok aber wie sollen ALLE Zahlentripel, a,b auflisten für die eben gilt a^3+b^3=c^2 also beliebige zahlentripel a,b,c auflisten bis zu einer GRENZE c < GRENZE die der Benutzer eingeben muss

also zB

Bitte geben sie eine obere Schranke MAX>0 ein für c < MAX : 200
a= 1.0, b= 2.0, c= 3.0
a= 2.0, b= 2.0, c= 4.0
a= 4.0, b= 8.0, c= 24.0
a= 7.0, b= 21.0, c= 98.0
a= 8.0, b= 8.0, c= 32.0
a= 9.0, b= 18.0, c= 81.0
a= 16.0, b= 32.0, c= 192.0
a= 18.0, b= 18.0, c= 108.0
a= 22.0, b= 26.0, c= 168.0

usw.... und eben diese Zahlentripel soller mir returnen innem string den ich wiederum an meine Dialogklasse übergeben muss weil nur der ne Ausgabe aufn Bildschim machen kann...

deswegen hab ich das alles auch in 3 for - schleifen durchlaufen lassen...
sorry hatte ich vorhin nicht erwähnt dass man alle Zahlentripel finden muss..
 
Zuletzt bearbeitet:
Dann schreibst du eine Klasse, die von JDialog erbt und bastelst dort erstmal deinen Dialog zusammen. Den Dialog rufst du dann halt über den Konstruktor auf und übergibst ihn dein String, der dort ausgegeben werden soll und schon bist du fertig.

Das sollte kein Problem sein, wenn du so schon die Logik für deine Aufgabe hast. 🙂
 
ohje :autsch:
was meinst du mit Klasse die von JDialog erbt? kannst du ein Beispiel dazu geben?

Ich hab ja schon eine Dialog Klasse... in einem Bereich soll der Nutzer die Funktion aussuchen :

Code:
 private void ausfuehrenFunktion(int funktion)
    {
        int     zahl;
        double  a=0;
        double  b=0;
        double  c=0;
        double  MAX;
        double  epsilon;
        double x;
                
        if (funktion == TEILERSUMME) {
            zahl = Stdin.readInt("\nBitte eine natuerliche ganze Zahl im Wertebereich 1 bis 2147483647 eingeben: ");
            arithmetik.teilersumme(zahl);
        
        }    
        
        else if (funktion == PRIMZAHL) {
        zahl = Stdin.readInt("\nBitte eine natuerliche ganze Zahl im Wertebereich 1 bis 2147483647 eingeben: ");
        arithmetik.primzahl(zahl);
        }   
        
        else if (funktion == QUADRGLEICHUNG) {
        System.out.println("\nGeben Sie nacheinander Zahlen a, b und c ein für eine quadratische Gleichung der Form : ax²+bx+c=0 ; Achtung: a darf nicht Null sein!");
                
         a = Stdin.readlnDouble("a= ");        //Variablen a einlesen.
         b = Stdin.readlnDouble("b= ");        //Variablen b einlesen.
         c = Stdin.readlnDouble("c= ");        //Variablen c einlesen.
        
        arithmetik.quadratischeGleichung( a , b , c);
        }
        
        else if (funktion == MATHEFORMEL) {
        
        MAX = Stdin.readlnDouble("Bitte geben sie eine obere Schranke MAX>0 ein für c < MAX : ");
        arithmetik.matheformel(MAX);  
        
        }        
        else if (funktion == SUMMENFORMEL) {
        System.out.print( "Dieses Programm berechnet die Summe einer Reihe bis sich der Wert der Summe um weniger ");
        System.out.println( "als eine vorgegebene Schranke epsilon ändert"); 
        epsilon = Stdin.readlnDouble("Bitte geben Sie eine untere Schranke epsilon ein: ");
        x       = Stdin.readlnDouble("Bitte Basis x eingeben:" );
        }
    
        else if (funktion == ENDE) {
        System.out.println("Programmende"); 
        }
        
        else  {
        System.out.println("Falsche Eingabe");
        }
        
}

und ich glaube wir solten das so machen dass er uns innerhalb der Methode "public void funktion(int funktion) die Ergebnisse ausgibt
also ich hätte dann in Bezug zur obigen aufgabe in dem Block
Code:
  else if (funktion == MATHEFORMEL) {
        
        MAX = Stdin.readlnDouble("Bitte geben sie eine obere Schranke MAX>0 ein für c < MAX : ");
        arithmetik.matheformel(MAX);  
        System.out.println("Lösungen: " +a+ ", " +b+" , " +c);
        }

und ich weiss nicht wie ich das
Code:
System.out.println("Lösungen: " +a+ ", " +b+" , " +c);
machen soll, da die Variablen a,b,c nur innerhalb der for schleife gültig sind soweit ich weiss .. oh man ist das kompliziert (für mich).
 
Zuletzt bearbeitet:
JDialog bezieht sich auf die GUI-Programmierung. Entweder hast du mich diesbezüglich nicht verstanden oder ich dich nicht. =)

Willst du ein Dialog haben, im Sinne einer GUI-Anwendung oder eine Konsolenausgabe?
 
du hast also eine Methode die etwas berechnet und das Ergebnis wird in einer anderen Klasse oder Methode gebraucht... Mach es doch so, der rückgabe typ deiner Methode sollte statt void ein array sein
dann kannst du alle ergebnisse ins array packen und der empfänger kann sich aus dem array die werte hollen und sie ausgeben..
 
@Xeonkryptus nein GUI hatten wir noch nicht also eher im Sinne einer Konsolenausgabe,
der Prof hat nur gemeint in der Berechnungsklasse sollen wir kein System.out.println benutzen, da dies in verschiedenen devices (zB Auto, Maschinen usw.) im Hintergrund passiert und es da keine Ausgabe gibt also das System dann einfach abstürzt ... und die Dialogklasse kommuniziert eben direkt mit dem Benutzer und da sollen wir das ausgeben...

@energy47 ja mit array würd es auch gehen also der PRof sagt entweder in einem String oder ggf. in einem geeigneten array.. nur wir haben grad in der Vorlesung mit array angefangen und ich hab noch nicht richtig den Plan wie ich das machen muss...
 
Zuletzt bearbeitet:
ich schau mir den array mal nachher an, aber geht das nicht auch noch irgendwie mit nem String?
ich hätte das jetzt so :
Code:
public static String matheformel(double MAX)
    {
        String s="";
        double ahochdrei, bhochdrei, cquadrat;
       

        assert MAX>=0 : "Obere Schranke muss größer oder gleich Null sein.";
        assert (MAX < Double.MAX_VALUE) : "Die Zahl muss im Double - Bereich liegen.";


        for (double a=1; a <MAX; a++){
            ahochdrei = (a*a*a);
            for (double b=1; b<MAX; b++) {
                bhochdrei = (b*b*b);
                for (double c=1; c<MAX; c++) {
                    cquadrat = c*c;
                    if ( ahochdrei + bhochdrei == cquadrat && a <= b) {
                       
                         s=("a= " +a+ ", b= " +b+ ", c= " +c);
                       
                    }
                }
            }
        }     
       
        return s;
    }
leider speichert s immer nur die letzen werte von a,b,c und überschreibt die alten.
und hab auch kein Plan an welcher stelle der dialogklasse ich den string ausgeben soll -.-

naja ich schau mir auch mal das mit den Arrays an...
 
s speichert immer nur das Letzte, weil es eine lokale Variable ist und nach der Beendigung der Methode nicht mehr existiert, daher hast du auch das return darin. Jetzt helfen auch in der Dialogklasse die Arrays, weil du dir nicht dutzende Variablennamen ausdenken musst und denen dann das Ergebnis aus deiner Methode übergeben.

Es empfehlen sich auch Arrays, weil du bestimmt schon in deiner Methode alle möglichen Ergebnisse ausgeben möchtest bzw abfragst und halt immer nur das letzte gespeichert wird, was bei einem Array halt nicht der Fall ist, da es wie ein Regal funktioniert. 🙂
 
du meinst du hast alle werte in einen string konkateniert?
dann kannst du aber mit deinen werten nichts mehr machen ausser du parst sie aus dem string wieder raus.. ich denke besser ist es hier alle errechneten werte im array zurück zu geben und sie anschliessend für weitere rechnungen oder ausgaben zu nutzen.. das ist flexibler und natürlcher..
 

Zurück
Oben