Erstes Programm: Polynom-Klasse

ava

Mitglied
Hi!

Ich habe ganz frisch angefangen (gerade jetzt) und freue mich auf Java und werde euch ab jetzt also regelmässig mit meinen Fragen nerven ;)

Zum Üben möchte ich als erstes eine Klasse schreiben, deren Objekte Polynome sind. Als Membervariables hätte ich den Grad des Polynoms sowie die Koeffizienten als ein double array. Für ein Polynom beträgt die Anzahl der Koeffizienten = Grad des Polynoms+1 - wie kann ich das entsprechend in Java umsetzen? Könnt ihr mir sagen, ob das so Sinn macht? Wie gesagt, ist das das erste, das ich je geschrieben habe...danke

---

Java:
package polynomials;

public class Polynomials {

     int degree;
     double[] coefficients;
     
     
     Polynomials(int degree)
     {
         
     this.degree = degree;
     this.coefficients = new double[degree+1];
   
     };
     
     
    public static void main(String[] args) {
        
    }
    
    
}
 
Zuletzt bearbeitet von einem Moderator:
M

Marcinek

Gast
Klingt logisch.

Wie kann man die Koeffizienten setzen?

Eine Klasse, die Polynomials heißt, würde eher suggerieren, dass es sich um eine Liste von Polynomen handelt und nicht um genau ein Polynom.
 

ava

Mitglied
(danke moderation fürs formatieren des codes, werd mich in zukunft drauf achten).

Hm, gute Frage, wie kommen die Koeffizienten rein?

Eigentlich sollte ich vielleicht den Konstruktor umschreiben, so dass eines der Argumente ein Array aus Koeffizienten ist:

Java:
   Polynomials(int degree, double[] coefficients)

Dann frage ich mich aber, wo genau ich festlegen kann, dass die Länge des Koeffizienten-Arays = degree+1 sein soll.

Kann ich das schon beim Aufschreiben der Member-Variables machen? Scheint mir nicht so sinnvoll, dort wird ja nur der Typ + Name der membervariables festgelegt...

Stimmt, schlecht gewählter Klassenname - irgendwie dachte ich, weil man ja eine klasse der blueprint beliebig vieler objekte ist, wäre ein plural geeigneter, wenn ich jetzt aber neue objekte initialisieren muss klingt das schon seltsam.
 

tribalup

Bekanntes Mitglied
Prüfe einfach im Konstruktor, ob die Anzahl der Elemente in coefficients=degree+1 ist.
Wenn das nicht der Fall ist dann musst du dir überlegen wie du mit Falschengaben umgehst.
 

ava

Mitglied
Ja, so etwas wie eine if, else schleife mit entsprechendem return bei else hab ich mir überlegt - gibt es aber keine Möglichkeit, die Grösse des Arrays schon vorher festzulegen?
If-else-Schleife finde ich etwas unelegant...
 

tribalup

Bekanntes Mitglied
Grundsätzlich solltest du dir überlegen ob du nur ein Array brauchst oder ob bei späteren Berechnungen Containerfunktionalität sinnvoll ist.
Vielleicht ist ein Container besser geeignet für deine Zwecke und du brauchst zudem nicht dessen Größe vorher festzulegen.
 

ava

Mitglied
Nein, ich hab eine andere Idee :)

Wie wärs damit:

Java:
package polynomials;

/**
 *
 * @author Pegah
 */
public class Polynomials {

     int degree;
     double[] coefficients;
         
     Polynomials(double[] coefficients)
     {
         
      this.coefficients = coefficients;
      this.degree = coefficients.length-1;
      
    
     };
     
     
    public static void main(String[] args) {
        
    }
    
    
}

Macht das Sinn?
Und eine Frage: Habe ich hier schon ein Array Objekt erzeugt? Irgendwie fehlt mir hier das "new" (wie new xy = double[] etc.)
 

tribalup

Bekanntes Mitglied
Ich denke hier arbeitest du nur mit einer Referenz.
Sicher bin ich mir aber nicht, da müsst ich kurz was schreiben wenn sich niemand anders zu Wort meldet.

Zum Program: es kommt darauf an was du später mit deinem Polynom machen willst.
 

pl4gu33

Top Contributor
Und eine Frage: Habe ich hier schon ein Array Objekt erzeugt? Irgendwie fehlt mir hier das "new" (wie new xy = double[] etc.)

du arbeitest, wie schon gesagt mit einer Referenz auf ein Objekt. Irgendwo vorher wurde das Objekt dann erzeugt und du kannst in der Methode Werte in dem Array ändern, aber nicht die Referenz des Objekt selbst ohne ein Return. bzw. die Änderung der Referenz hat keinen "Wert" außerhalb der Methode ohne das Return
 
Zuletzt bearbeitet:

Landei

Top Contributor
Nein, ich hab eine andere Idee :)

Wie wärs damit:

Java:
package polynomials;

/**
 *
 * @author Pegah
 */
public class Polynomials {

     int degree;
     double[] coefficients;
         
     Polynomials(double[] coefficients)
     {
         
      this.coefficients = coefficients;
      this.degree = coefficients.length-1;
      
    
     };
     
     
    public static void main(String[] args) {
        
    }
    
    
}

Macht das Sinn?
Und eine Frage: Habe ich hier schon ein Array Objekt erzeugt? Irgendwie fehlt mir hier das "new" (wie new xy = double[] etc.)

Besser Varargs: [c]Polynomials(double ... coefficients)[/c]. [c]degree[/c] braucht man nicht als eigenes Feld, mit einer Methode [c]getDegree[/c] könnte man es aus der Array-Länge ermitteln.
 

ava

Mitglied
ok, gute idee @landei

so etwas in der art: ?

Java:
package polynomials;

/**
 *
 * @author 
 */
public class Polynomials {

     int degree;
     double[] coefficients;
     
    \\kommt noch
    void addPoly(){};
     
     int getdegree(){
     return coefficients.length-1;
     }
     
     Polynomials(double[] coefficients)
     {
         
      this.coefficients = coefficients;
     
     
     };
     
     
    public static void main(String[] args) {
        
    }
    
    
    
}
 

pl4gu33

Top Contributor

hier mal ein Bsp. dafür:

Java:
public class Prog {
    public Prog(){
    	double[] doub=new double[5];
    	System.out.println(doub.length);    	
    	change(doub);
    	System.out.println(doub.length + " <-- nach der Methode"); 
    	doub=change2(doub);
    	System.out.println(doub.length + " <-- nach der Methode 2ten"); 
   }
    
    public void change(double[] d){
    	d=new double[100];
    	System.out.println(d.length + " <-- in der Methode");  
    }
    
    public double[] change2(double[] d){
    	d=new double[20];
		return d;
    	
    }
    
    public static void main(String[] args){
    	new Prog();
    }
}
 

Landei

Top Contributor
Java:
package polynomials;
 
import java.util.Arrays;

public class Polynomial {

    private double[] coefficients;

    public Polynomial(double... coefficients) {
        this.coefficients = removeLeadingZeros(coefficients);
    }

    private double[] removeLeadingZeros(double[] array) {
        int k = array.length;
        for(int i = array.length-1; i >= 0; i--) {
           if(array[i] == 0.0) {
               k = i;
           } else {
               break;
           }
        }
        double[] result = new double[k];
        System.arraycopy(array,0,result,0,k);
        return result;
    }

    public int getDegree(){
        return coefficients.length-1;
    }

    public double getCoefficient(int index) {
       return index >= coefficients.length ? 0.0 : coefficients[index];
    }

    public Polynomial addPoly(Polynomial that){
        int length = Math.max(this.getDegree(), that.getDegree())+1;
        double[] results = new double[length];
        for(int i = 0; i < length; i++) {
            results[i] = this.getCoefficient(i) + that.getCoefficient(i);
        }
        return new Polynomial(results);
    }

    @Override
    public String toString() {
       return "Poly" + Arrays.toString(coefficients);
    }
    
    @Override
    public int hashCode() {
        return Arrays.hashCode(coefficients);
    }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) {
           return true;
        }
        if (o instanceof Polynomial) {
            Polynomial that = (Polynomial) o;
            return Arrays.equals(this.coefficients, that.coefficients);
        }
        return false;
    }
}

Das würde ich als halbwegs vernünftigen Ausgangspunkt ansehen. Wichtig ist vor allem die Methode removeLeadingZeros, denn 0*x² + 3*x + 4 ist eben kein quadratisches, sondern nur ein lineares Polynom. Ansonsten funktioniert auch getDegree, hashCode und equals nicht richtig. Wichtig ist auch, dass das Eingangs-Array in jedem Fall kopiert wird (Stichwort "Defensive Kopie").

Für Koeffizienten, die außerhalb des Array liegen, kann man ruhig 0 zurückgeben, das macht die Implementierung vieler Funktionen einfacher. Man muss noch beachten, dass die Koeffizienten aus mathematischer Sicht "rückwärts" angegeben sind (die toString-Methode gibt sie auch so aus), aber dass dies die bessere Lösung ist, z.B. wäre die Implementierung der addPoly-Methode wesentlich umständlicher, wenn der Koeffizient für die höchste Potenz als erstes käme.
 
Zuletzt bearbeitet:

ava

Mitglied
jap,das mit den koeff. = null hätte ich als nächstes gemacht.

vielen dank für die mühe! :) sehr lieb..

ihr könnt mir iA auch einfach tipps geben, dann bastle ich selber etwas rum ;)

selber was rausfinden ist ja immer schwieriger als ein bereits bestehendes programm "nur" zu verstehen...und ich brauch ja nicht grad drigend ein fix-fertiges programm zum addieren von polynomen :p

werds mir anschauen und weiterentwickeln und melde mich dann wieder

lg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Erstes Programm: Matrizen Multiplikation Java Basics - Anfänger-Themen 10
D Auswahl und Ausgabe erstes Programm Java Basics - Anfänger-Themen 8
M Mein erstes Programm Java Basics - Anfänger-Themen 3
T erstes kleines Programm Java Basics - Anfänger-Themen 17
M Erste Schritte Erstes Programm mit Compiler öffnen Java Basics - Anfänger-Themen 4
M Mein erstes Java Programm Java Basics - Anfänger-Themen 5
E Erstes "kleines" Programm Java Basics - Anfänger-Themen 5
1 Mein erstes Programm, HELP!! Java Basics - Anfänger-Themen 2
D Mein erstes Programm flackert Java Basics - Anfänger-Themen 5
W Erste Schritte erstes Programm Java Basics - Anfänger-Themen 40
W Erstes eigens Programm - Klassen- und Schüler Verwaltungsprogramm Java Basics - Anfänger-Themen 5
M Erstes "sinnvolles" Programm Java Basics - Anfänger-Themen 11
A Erstes Programm - Problem beim Ausführen als jar Java Basics - Anfänger-Themen 3
B Methoden Mein erstes Programm - und gleich Probleme Java Basics - Anfänger-Themen 6
R [CODECHECK] Erstes Programm Java Basics - Anfänger-Themen 6
M Erstes Programm und Fehlermeldung Java Basics - Anfänger-Themen 5
M Sammlung von Anfängerfragen für mein erstes Programm Java Basics - Anfänger-Themen 15
G Erstes Java-Programm Java Basics - Anfänger-Themen 10
E Erstes Programm - Problem mit Exception Java Basics - Anfänger-Themen 3
L Suche Verbesserungsvorschläge für mein erstes Programm Java Basics - Anfänger-Themen 34
Bierhumpen mein erstes großes Programm. Was ändern? verbessern? Java Basics - Anfänger-Themen 12
A Mein erstes Programm Java Basics - Anfänger-Themen 6
T Erstes Programm Java Basics - Anfänger-Themen 7
B Erstes Programm :-/ Java Basics - Anfänger-Themen 3
Alen123 Erstes Arbeiten mit Methoden. Java Basics - Anfänger-Themen 5
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
S Mein erstes eigenes Projekt - Aufbau und Strukturierung Java Basics - Anfänger-Themen 6
I Letztes, erstes Element vom Array Java Basics - Anfänger-Themen 9
X Array erstes und letztes Element tauschen Java Basics - Anfänger-Themen 2
J erstes Vorkommen eines Chars aus einem String entfernen Java Basics - Anfänger-Themen 3
J erstes Vorkommen eines chars entfernen Java Basics - Anfänger-Themen 1
H java erstes projekt Java Basics - Anfänger-Themen 502
M OOP Mein erstes Textadventure... Java Basics - Anfänger-Themen 3
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
V Erste Schritte Erstes Project - Hilfe Java Basics - Anfänger-Themen 9
J Erstes Applet läßt sich nicht anzeigen Java Basics - Anfänger-Themen 2
M Erstes Textrollenspiel funktioniert...nicht. Java Basics - Anfänger-Themen 2
L Erstes Projekt aus zwei Projekten Java Basics - Anfänger-Themen 1
T mein erstes Java projekt Java Basics - Anfänger-Themen 8
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
M Erstes Prog. OS Abfrage Java Basics - Anfänger-Themen 9
E Mein erstes Java Projekt - Sauberer code? Java Basics - Anfänger-Themen 28
B Erstes Element eines Vectors erhalten Java Basics - Anfänger-Themen 5
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
I Liste Remove erstes Element Java Basics - Anfänger-Themen 5
J Bald erstes Java Buch durchgearbeitet - Wie gehts nun weiter? Java Basics - Anfänger-Themen 6
T Erstes Zeichen aus String löschen Java Basics - Anfänger-Themen 8
J erstes Prog./Klasse - Konstruktur/Objekterstellung funktioniert nicht Java Basics - Anfänger-Themen 25
B erstes Java-Applet Java Basics - Anfänger-Themen 7
M Erstes Zeichen in einem String in Großbuchstaben wandeln Java Basics - Anfänger-Themen 3
C Erstes Arraylist Element in for Schleife überspringen Java Basics - Anfänger-Themen 6
G Feststellen, ob erstes Zeichen eines Strings eine Ziffer ist Java Basics - Anfänger-Themen 11
M Serialisierung erstes Beispiel Java Basics - Anfänger-Themen 4
A erstes größeres Projekt Java Basics - Anfänger-Themen 14
P Mein erstes JAR-File Java Basics - Anfänger-Themen 8
G erstes Zeichen eines Strings herausfinden Java Basics - Anfänger-Themen 3
G erstes element einer haspmap Java Basics - Anfänger-Themen 5
G erstes Arbeiten mit Collections Java Basics - Anfänger-Themen 17
G erstes Arbeiten mit Packages Java Basics - Anfänger-Themen 2
T Erstes RPG: KeyAdapter Problem Java Basics - Anfänger-Themen 3
M erstes Zeichen ersetzen Java Basics - Anfänger-Themen 2
C Konstruktor wird nicht als erstes aufgerufen! Java Basics - Anfänger-Themen 11
O mit Regex erstes Zeichen überprüfen Java Basics - Anfänger-Themen 3
D JNDI-DataSource erstes mal benutzen Java Basics - Anfänger-Themen 4
C Erstes kleines Problem - string in chat ? Java Basics - Anfänger-Themen 9
M Erstes Element einer Enumeration? Java Basics - Anfänger-Themen 6
A Erstes Buch durchgelesen, wie weiter vorgehen? Java Basics - Anfänger-Themen 8
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
M Java Mail Programm Java Basics - Anfänger-Themen 4
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
M Mini Jar-Programm Java Basics - Anfänger-Themen 51
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
M Das Programm stellt nichts dar Java Basics - Anfänger-Themen 2
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
Z Programm Ideen Java Basics - Anfänger-Themen 8
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
T Programm stürzt ab Java Basics - Anfänger-Themen 40
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
K Ist das Programm schlecht bzw. schlampig programmiert ? Java Basics - Anfänger-Themen 9
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
M Von Eclipse zum richtigen Programm Java Basics - Anfänger-Themen 1
nbergmann IntelliJ: Wie lade ich ein fertiges Programm aus dem Lehrbuch? Java Basics - Anfänger-Themen 26
D Anfängerfrage zu meinem Programm. Java Basics - Anfänger-Themen 15
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 22
I Jetty starten von Programm (Main) Java Basics - Anfänger-Themen 27
Kydo Programm Beschreibung Java Basics - Anfänger-Themen 3
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben