Vererbung Variablen klassenübergreifend nutzen

spinneimnetz

Mitglied
Hallo zusammen,

ich brauche (dringend) Hilfe.
Aber ich stell mich und meine Situation trotzdem erstmal kurz vor:
Ich studiere "Angewandte Mathematik" und habe auch das Modul "Anwendungsorientierte Programmierung" sprich Java. Unser Prof. ist leider recht unfähig weswegen man sich die Vorlesungen schenken kann. Ich hab mich also das Semester über hingesetzt und versucht mit Büchern & Co. Java zu lernen. Die Belege (Nötig zur Prüfungszulassung) haben damit ganz gut geklappt.
Ich sitze nun an meinem Projekt auf das es letztlich die Note gibt. Fällig am Freitag (25.08.17). Daher das "dringend".

Thema ist: Lösen eines Linearen Gleichungssysthems. Datei einlesen, ausrechnen, ausgeben. Das ganz mit swing (wovon ich wenig Ahnung habe).

Ich habe nun im groben die Oberfläche. (siehe Anhang) Sieht nur noch nicht wirklich hübsch aus
Das Einlesen und Anzeigen im ersten Fenster läuft. Das Ausrechnen selbst auch. Jedoch bekomme ich es nicht hin, dass die Lösung im zweiten Fenster erscheint sobald ich auf "lösen" klicke.
Das Problem ist dabei vermutlich ein Grundlegendes. Denn ich erzeuge, wenn ich die Datei einlese ein LGS (eigenes Objekt) und gebe dieses im ersten Fenster als String aus. Das ganze passiert in einer extra Klasse in der dann auch diese Methode actionPerformed(Action act) drin steht.
Ich weiß nun aber nicht wie ich auf das in dieser Klasse erzeugte LGS zugreifen soll um es dann beim drücken des zweiten Buttons "weiterzuverarbeiten".

Ich habe jetzt einiges ausprobiert mit Vererbung usw. Und habe ein kleineres Beispiel zusammengebastelt. Aber ich glaube ich blicke zu wenig durch. Vielleicht könnt ihr mir ja einen Hinweis geben oder einen Link. Leider weiß ich nicht genau wonach ich suchen soll. Ich denke mal das es an meinem fehlenden Verständnis der Vererbung liegt und weniger an dem (quasi nicht vorhandenen) Verständnis der GUI.

Vielen herzlichen Dank im Voraus!
 

Anhänge

  • GUI.PNG
    GUI.PNG
    14,3 KB · Aufrufe: 72
Zuletzt bearbeitet:
X

Xyz1

Gast
Das geht nicht ohne Glaskugel - oder ich müsste raten - oder dir ein paar allg. Entwurfsmuster an die Hand geben. MVC evtl.
 
X

Xyz1

Gast
Ups, etwas übersehen bei der Antwort, kann weg....
 
Zuletzt bearbeitet von einem Moderator:

spinneimnetz

Mitglied
Ich hab hier mal ein bissl Quellcode von dem kleinen Beispiel wo ich erstmal probiert hab um nicht im Projekt rumzufuschen.
In der Main wird nur "Aussehen()" aufgerufen.
Java:
package Projekt_Test;
import javax.swing.*; import java.awt.*; import java.awt.event.*;

public class Aussehen {
 
    JFrame fenster = new JFrame("Test");
    JButton erzeug = new JButton("erzeugen");
    JButton machWas = new JButton("mach");
    JTextArea zeig = new JTextArea(5,10);
    JTextArea mach = new JTextArea(5,10);
  
    public Aussehen(){

        fenster.setLayout (new FlowLayout());      
      
        fenster.add(erzeug);
        fenster.add(zeig);
        fenster.add(machWas);
        fenster.add(mach);

        fenster.setVisible(true);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(200, 250);
  

        erzeug.addActionListener(new Fun_erzeug(zeig));
        //1. Versuch beim "Klicken" Objekt (hier String) zu erzeugen und dann mit dem zweiten "Klick" aufzugreifen.
        Fun_erzeug anzeig = new Fun_erzeug(zeig);
        String n = anzeig.getTest();
//        machWas.addActionListener(new Fun_mach(mach, n));
      
        //für den 2. Versuch über Vererbung wieder ohne String übergeben.
        machWas.addActionListener(new Fun_mach(mach));      
  
      //Ein anderer Versuch der gar nix brachte war diese Classe zur "Mutterklasse" zu machen. 
   public JTextArea getZeig() {
        return zeig;
    }
    public void setZeig(JTextArea zeig) {
        this.zeig = zeig;
    }
    }
}

Java:
package Projekt_Test;
import java.awt.event.*; import javax.swing.*;

public class Fun_erzeug implements ActionListener{
   
    private JTextArea zeig;
    public String test = "Anfang";
   
    public Fun_erzeug(JTextArea zeig){
        this.zeig = zeig;
        test = "konstruktor_zeig";
    }
   
    public void actionPerformed(ActionEvent erzeug){
        setTest("nach Action_zeig");
        this.zeig.setText(test);   
    }
   
    public String getTest(){
        return test;

    };
   
    public void setTest(String test){
        this.test = test;
    }

}
Java:
package Projekt_Test;
import java.awt.event.*;
import javax.swing.*;

public class Fun_mach extends Fun_erzeug implements ActionListener{
   
    private JTextArea mach;
//    Fun_erzeug erzeugen = new Fun_erzeug(mach);
    String machText = "Fun_mach";
   
    public Fun_mach(JTextArea mach){
        super(mach);        // 2. Versuch mit Vererbung
        this.mach = mach;
        this.machText = getTest();
       
    }
   
    public void actionPerformed(ActionEvent mach){
        String text = machText + " was denn?";
        this.mach.setText(text);
    }

}

Folgendes passiert nach meinem Verständnis.
Wenn ich auf den Button "erzeugen" klicke, dann erscheint der bearbeitet Text "nach Action_zeig". so wie es sein soll.
Wenn ich dann auf den Button "mach" klicke wird der Text aus dem Konstruktor von "Fun_erzeug" im zweiten Fenster angezeigt. Eigentlich möchte ich da aber den Text "Action_zeig" (also der nach dem Ausführen) sehen.
(Im Projekt wäre das halt das LGS was ich dann vor der Ausgabe noch lösen würde.)

Ich hoffe das ist einigermaßen verständlich.
Gut möglich das es an meiner mangelnden Konzentration liegt.

Bin dankbar für jeden Hinweis.
 
X

Xyz1

Gast
Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package mvcbeispiel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

/**
 * @author
 */
public class MVCBeispiel {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Modell modell = new Modell();
        View view = new View(modell);
        modell.addObserver(view);
    }

}

class View extends JFrame implements Observer {

    Modell modell;
    JTextField f2;

    View(Modell m) {
        modell = m;

        JButton b1 = new JButton("Datei laden"),
                b2 = new JButton("LGS lösen"),
                b3 = new JButton("Speichern");
        b1.addActionListener(new ControllerA(m));
        b2.addActionListener(new ControllerB(m));
        b3.addActionListener(new ControllerC(m));

        JTextField  f1 = new JTextField("bli");
                    f2 = new JTextField("bla");

        setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
        add(b1);
        add(b2);
        add(b3);
        add(f1);
        add(f2);
        pack();

        setVisible(true);
    }

    @Override
    public void update(Observable o, Object arg) {
        SwingUtilities.invokeLater(() -> {
            f2.setText(modell.getTextToDisplay());
        });
    }

}

class ControllerA implements ActionListener {

    Modell modell;

    ControllerA(Modell m) {
        modell = m;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //Datei laden...
        modell.setTextToDisplay(modell.getTextToDisplay() + " A");
    }
}

class ControllerB implements ActionListener {

    Modell modell;

    ControllerB(Modell m) {
        modell = m;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //LGS lösen...
        modell.setTextToDisplay(modell.getTextToDisplay() + " B");
    }
}

class ControllerC implements ActionListener {

    Modell modell;

    ControllerC(Modell m) {
        modell = m;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //Speichern...
        modell.setTextToDisplay(modell.getTextToDisplay() + " C");
    }
}

class Modell extends Observable {

    String textToDisplay = "hula hoop";

    public String getTextToDisplay() {
        return textToDisplay;
    }

    public void setTextToDisplay(String textToDisplay) {
        this.textToDisplay = textToDisplay;
        setChanged();
        notifyObservers();
    }
}

lgs1.PNG

Ich bitte die anderen kurz "da darüber zu schauen".
 

Flown

Administrator
Mitarbeiter
@DerWissende möchtest du wirklich Feedback haben? Na gut:
- View braucht nicht von JFrame extenden
- Felder können private sein
- Eine Variablendeklaration pro Zeile
- Alles English außer Modell bzw. modell
- View kann sich selbst beim Model registrieren (muss nicht in der main passieren)
- Sprechendere Variablennamen verwenden
 
X

Xyz1

Gast
Ok, also bis auf die Tippfehler und die leichte Schludrigkeit ist das MVC-Konzept richtig umgesetzt?
+ 1 View kann sich selber registrieren, da haderte ich etwas

Theoretisch kann sie es auch so umsetzen, aber ich weiß nicht ob das nicht .... ist
 
X

Xyz1

Gast
dass es "quick and dirty" ist und nur die Idee demonstrieren soll
Das stimmt - und ich überlegte auch, ob ich das Entwurfsmuster hier angeben sollte, da es ja schon in Richtung Komplettlösung :oops:

Ein this. hat sich auch noch "eingeschlichen", das wollte ich eigentlich auch umgehen
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter

spinneimnetz

Mitglied
UI
danke für die vielen Antworten!
Ich werde mir das MVC (wofür steht das? :oops:) jetzt genauer anschauen. Sehe schon einige Dinge die ich noch nicht kannte und wohl erstmal nachschlagen muss.
z.B. hab ich mich mit "model" noch nicht beschäftigt und noch nie wirklich ein @override benutzt.
Und die Zeile hier:

Java:
    public void update(Observable o, Object arg) {
        SwingUtilities.invokeLater(() -> {
            f2.setText(modell.getTextToDisplay());
        });

schaut für mich auch sehr unbekannt vor. Also erstmal nachschlagen und den Code verstehen.
Melde mich dann wieder.
Danke!
 

spinneimnetz

Mitglied
Tut mir leid. Ich dachte es sei eine foreninterne Abkürzung und hab nur im Forum kurz gesucht...

Ich hab mir den Code jetzt angeschaut. Sind wie gesagt einige Dinge drin die ich noch nicht ganz durchblicke. Allerdings weiß ich nicht ob es mein Problem wirklich löst. (Hab mich vielleicht auch zu unklar ausgedrückt)
Ich versuche es nochmal zu erklären:
Also wenn ich bspw. über eine Datei eine "2" einlese. Dann möchte ich diese, wenn auf "lösen" geklickt wird, nehmen und darauf z.B. 5 addieren und dann im zweiten Feld ausgeben.
Problem ist das ich nicht weiß wie ich an diese "2" herankomme. Die wird ja nirgendwo direkt erzeugt sondern nur von der Datei gelesen und ins erste Feld geschrieben.

Aus Zeitgründen werde ich mich jetzt erst mal an die noch fehlende Fehlerberechnung setzen.

Danach schau ich mir das MVC-Beispiel noch mal genauer an.

(Notfalls lasse ich das LGS direkt nach dem laden lösen und in einem Fenster ausgeben. Dann gibt es eben keinen extra lösen Button.)
 
X

Xyz1

Gast
@spinneimnetz
Wenn du dir das Entwurfsmuster ansehen willst, dann beachte den Link in meiner PN.
----
Damit nicht alles vergebens ist, pack alles in eine Klasse. Klassenvariablen kennst du sicher. darin speicherst du das LGS vorher und nachher. ;)
 
X

Xyz1

Gast
Kann nicht in deinen Kopf schauen, aber welche Klassen hast du bis jetzt und mit einer kurzen Beschreibung dazu, bitte.

Java:
/**
 * Beschreibung, was die Klasse ausmacht
 * @author
 */
public class MVCBeispiel {

    int[] lgs; // das ist eine Objektvariable...

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
//        Modell modell = new Modell();
//        View view = new View(modell);
//        modell.addObserver(view);
        MVCBeispiel mvcBeispiel = new MVCBeispiel(); // Standardkonstruktor...
        mvcBeispiel.ladeDatei();
        mvcBeispiel.loese();
        mvcBeispiel.speichere();
    }

    void ladeDatei() {
        lgs = new int[]{4, 3, 2, 1};
    }

    void loese() {
        Arrays.sort(lgs);
    }

    void speichere() {
        System.out.println(Arrays.toString(lgs));
    }

}
 

spinneimnetz

Mitglied
Ohje Jungs, ihr seid mir zu schnell xD
Ich will wie gesagt erstmal noch die Fehlerberechnung umsetzen. (Leider noch nicht fertig) dann schau ich mir das hier gestellte Problem mit all euren Ratschlägen noch einmal an.

Ich denke die Grundstruktur habe ich im groben. Wenn ich es in der Console ausgeben lasse passt alles. Es ist wirklich die Verbindung zur GUI die mir noch Probleme macht.
Wir aber noch etwas dauern.
Ich melde mich dann nochmal. Ich bin einfach nicht so schnell ;)

Vielen Dank, das ihr euch so viele Gedanken darum macht!
 

spinneimnetz

Mitglied
Sooooo...
ich habe jetzt endlich die Berechnungen alle fertig. Hat leider länger gedauert als erwartet.. (kamen noch einige andere Dinge dazwischen, so dass ich nicht so viel Zeit fürs Programmieren hatte wie gehofft)

Da ich für die Abgabe eh die Programmstruktur mitliefern muss, habe ich jetzt mal alles grob aufgeschrieben.
ProgrammStruktur1.PNG ProgrammStruktur2.PNG
Ich weiß immer nicht genau wann man eine neue Klasse/ ein neues Paket nimmt. Ich habe versucht es einfach so zu strukturieren, dass ich selber durchblicke und nicht zu viel in einer steckt.
(programmiere übrigens im Eclipse NEON, das wird so verlangt. Grundlagen habe ich aber erstmal im NotePad++ und Konsole gemacht)

Also das Paket GUI muss ich wohl nochmal überarbeiten. Da liegt ja das Problem was mich zu euch gebracht hat und vermutlich doch nicht unbedingt mit Vererbung zu tun hat. Ich setze mich morgen daran Model, View und Controller zu verstehen und umzusetzen.
Die Art wie Fun_oeffnen und Fun_speichern aufgebaut sind habe ich aus einem Post im Netz übernommen. (https://www.tutorials.de/threads/da...uegen-bzw-datei-speichern-in-txt-file.255043/)

Eigentlich muss ich auch noch einige Fehler abfangen und mich mit Exceptions vertraut machen. Hab schon gesehen das es dazu auch was im Forum gibt. Mal sehen wie weit ich komme. ;)
 
X

Xyz1

Gast
Nicht alles gelesen, aber theoretisch könnte auch oeffnen, loesen, speichern in dieselbe Klasse behandelt werden:
Java:
    @Override
    public void actionPerformed(ActionEvent e) {
        JButton b = (JButton) e.getSource();
        String text = b.getText();
        if (text.equals("....")) {
            //oeffnen
            modell.setTextToDisplay(modell.getTextToDisplay() + " A");
        } else if (text.equals("....")) {
            //loesen
            modell.setTextToDisplay(modell.getTextToDisplay() + " B");
        } else if (text.equals("....")) {
            //speichern
            modell.setTextToDisplay(modell.getTextToDisplay() + " C");
        }
    }

@Override musst du nicht unbedingt dazuschreiben, aber gibt an, dass hier eine Methode aus einer Oberklasse...

Jagut, aber dann wird's ja langsam. ;)

Wegen GUI.... Also es gibt da zwei Ansätze, eine Klasse wird eine Referenz auf eine andere Klasse (gegeben), oder du gibst das LGS "parametergesteuert" hin und her. Aggregation, (einfache direkte unäre unidirektionale) Assoziation oder (normale) Assoziation.

Habe etwas im Lexikon gewühlt. :rolleyes:
 

spinneimnetz

Mitglied
Zwischenstand:
Ich habe mir dieses Beispiel
(http://blog.bigbasti.com/tutorial-model-view-controller-mvc-struktur-in-java-projekten-nutzen/)
angeschaut und auf mein Projekt "umgemünzt". Also habe ich jetzt für die gleiche Struktur
Eine Klasse View, eine Model und eine Controller.
Nun versuche ich als nächsten Schritt, statt den eingegebenen Text die Datei einzulesen.
Das sah bisher ja so aus:

Java:
public class Fun_oeffnen implements ActionListener {
  
    private JTextArea lgsfeld;
    public LGS lgs = null;
    public Fun_oeffnen(JTextArea lgsfeld){
        this.lgsfeld = lgsfeld;
    }
 
    public void actionPerformed(ActionEvent oeff){

        final JFileChooser fc = new JFileChooser();
        int rueckWert = fc.showOpenDialog(null);
        //Rückgabewert prüfen
        if(rueckWert == JFileChooser.APPROVE_OPTION){
            File datei = fc.getSelectedFile();
                try {
                    lgszeigen(datei, lgsfeld);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

        }
    }
     
    public void lgszeigen(File datei, JTextArea lgsfeld)
    throws FileNotFoundException{
  
        double[][] ab = Datei_lesen.Ab_erzeug(datei);
        LGS lgs =  new LGS(ab);
              
        String text = "";
      
        if(datei.exists()){
             text = Ausgabe.einlLgs(lgs);
        }
        else{
            text = "Fehler beim Einlesen";
        }          
        this.lgsfeld.setText(text);  
        }  
}

Ich bin noch nicht ganz sicher wie das ganze Zusammenspielt, also in welche Klasse was gehört bzw. ob ich noch weitere Controller-Klassen benötige... aber ich glaube ich bin auf einen guten Weg ;)
 
Zuletzt bearbeitet:
X

Xyz1

Gast
LGS lgs müsste ins Model,
Fun_oeffnen bräuchte eine Referenz auf das Model,
bei Änderung meldet sich das Model bei der View, diese würddann JTextArea lgsfeld aktualisieren,

aaaaber es ist noch fraglich, ob du das wirklich so machen möchtest,

aaaaber bei der Logik kann ich dir nicht helfen, das ist bei dir,

sieht aber gut aus mit den Methoden
Bearbeitung:
Untitled Diagram.png
 
Zuletzt bearbeitet von einem Moderator:
X

Xyz1

Gast
Hääh ?? Ich verstehe nur Bahnhof
Was / welchen Teil verstehst du denn nicht?
I-wie kann ich dir das nicht glauben. :(

LGS lgs müsste ins Model,
Fun_oeffnen bräuchte eine Referenz auf das Model,
bei Änderung meldet sich das Model bei der View, diese würddann JTextArea lgsfeld aktualisieren,
Das sollte "geschehen"...

Ignoriere das UML Dings einfach

Es ist auch so, wir versuchen hier ohne Code Code zu refactoren, das ist schwer
Oder meinst du nicht auch?
 

spinneimnetz

Mitglied
Ich haaaabs!!!!
Es wird eingelesen und die Lösung ausgegeben!!
Es is zwar noch denkbar hässlich XD Aber es funktionert. Und habe vor paar Minuten von einem Kommilitonen erfahren das die GUI Zusatz ist o_O
Eine verständliche Aufgabenstellung wäre mal was gewesen.. Oder ein Prof den man fragen kann.. Aber er schrieb direkt:
"Gibt es bei der Aufgabenbeschreibung unklar formulierte oder nicht spezifizierte Details, so können Sie diese nach Ihrem Ermessen festlegen. (In der realen Welt in Absprache mit dem Auftraggeber)."
...

Vielen Dank für die Hilfe!
Der Hinweis
LGS lgs müsste ins Model,
Fun_oeffnen bräuchte eine Referenz auf das Model,
bei Änderung meldet sich das Model bei der View, diese würd dann JTextArea lgsfeld aktualisieren,

Könnt ihr mir vielleicht noch ein Layout empfehlen damit es einigermaßen hübsch ist und sich das Fenster an den Inhalt anpasst?
 

spinneimnetz

Mitglied
Also es soll (am einfachsten ist wahrscheinlich alles untereinander)
den DateiLaden-Button geben
darunter ein Fenster in dem das LGS aus der Datei angezeigt wird. Das kann unterschiedlich groß sein. Vorallen die Breite variiert
Dann der Button-Lösen
Und darunter das Fenster mit dem Lösungsvektor und dem Fehler. Was auch wieder unterschiedlich lang sein kann. da wäre vielleicht so ein Schiebebalken an der Seite praktisch.
und zum Schluss der Speichern Button.
also im Grunde schon wie beim ersten Bild nur das das voll vermurktst ist sobald das eingelesene LGS größer ist.
 
X

Xyz1

Gast
Evtl so gestalten:

uib.PNG

Zwischen den Buttons (gleichgroß) sind 20 Pixel, zwischen allen anderen sind 10 Pixel, glaube ich mal
LayoutManager + JScrollPane
 

spinneimnetz

Mitglied
Danke! Das sieht passend aus. Probier ich!

ABER
Wie könnt es anders sein. Es ist ein neues Problem aufgetreten, bzw. ging es doch noch nicht ganz.
Statt des eingelesenen Ab gibt es mir das Ab0 (also schon in Dreiecksform) aus. Ist aber kein Fehler der GUI, passiert nämlich auch in der Console.
Das Problem muss denk ich irgendwo in diesen beiden Dateien liegen. Ich find es aber einfach nicht :(

Java:
package LGS_Bearbeitung;
public class LGS {

    private double[][] ab;        //Lgs: A*b=x als Ab-Matrix
    private double[][] a;        //A-Matrix des LGS
    private double[] b;            //b-Vektor des LGS
    private double[] x;            //Lösungsvektor
    private double[] res;        //Residuums-Vektor
    private double absFehl;        //absoluter Fehler - Norm(res)
    private double relFehl;        //relativer Fehler - Ea / Norm(b)

     public LGS (double[][] ab_lgs){
        setAb(ab_lgs);
        setA(ab_lgs);
        setB(ab_lgs);
        setX(ab_lgs);
        setRes(ab_lgs);
        setAbsFehl(res);
        setRelFehl(absFehl, b);  
    }
   
public void setAb(double[][] ab_lgs){
        this.ab = ab_lgs;
    }

//ab = LGS A*x=b als Ab-Matrix
    public double[][] getAb() {
        return ab;
    }

//a = A-Matrix des LGS
    public double[][] getA() {
        return a;
    }

    public void setA(double[][] ab_lgs) {
        int dim = ab_lgs.length;
        double[][] a = new double[dim][dim];
       
        for(int j = 0; j < dim; j++){
            for(int k = 0; k < dim; k++){
                a[j][k] = ab_lgs[j][k];
            }
        }   
        this.a = a;
    }

//b= b-Vektor des LGS
    public double[] getB() {
        return b;
    }

    public void setB(double[][] ab_lgs) {
        int dim = ab_lgs.length;
        double[] b = new double[dim];
       
        for(int k = 0; k < dim; k++){
            b[k] = ab_lgs[k][dim];
        }
        this.b = b;
    }

//x= X-Vektor des LGS
    public double[] getX() {
        return x;
    }

    public void setX(double[][] ab_lgs) {
        this.x = Loesung.findeLoesung(ab_lgs);
    }
//res = Residuum zur Lösung
    public double[] getRes(){
        return res;
    }
   
    public void setRes(double[][] ab_lgs){
        this.res = Fehler.residuum(a, b, x);
    }
//absFehl = absouter Fehler
    public double getAbsFehl(){
        return absFehl;
    }  
    public void setAbsFehl(double[] res){
        this.absFehl = Fehler.norm(res);
    }
//relFehl = Relativer Fehler
    public double getRelFehl(){
        return relFehl;
    }
    public void setRelFehl(double absFehl, double[] b){
        this.relFehl = absFehl/Fehler.norm(b);
    }
}

Java:
package LGS_Bearbeitung;

public class Loesung  {

 
   
//Auslesen des Lösungsvektors aus der Dreiecksmatrix
        public static double[] findeLoesung(double[][] ab0){
            erzeugeNullen(ab0);
            int m = ab0.length;

            double[] y = new double[m];                //Vektor mit 0en
            double[] x = new double[m];                //Lösungsvektor
                   
            for (int j = m-1; j >= 0; j--){
                    x[j] = ab0[j][m];
                for (int k = 0; k < m ; k++ ){
                    x[j] = x[j]- ab0[j][m-1-k] * y[m-1-k];   
                }
                x[j]=x[j]/ab0[j][j];
                y[j]=x[j];
            }
            return x;
        }   
       
    //Dreiecksmatrix erzeugen
            public static double[][] erzeugeNullen(double[][] ab0){
                // m = Zeilenanzahl  // n = Spaltenanzahl    // z = Pivotzeile    // p = Pivotelement     // pq = Pivotquotient
               
                int m = ab0.length;       
                int n = ab0[0].length;   
                int z = 0;                
               
                for(int k = 0; k < m-1; k++){       
                    for(int j = k; j < m-1; j++){
                        double p = 0;
                // Maximum finden = Pivotelement       
                        while( j < m){
                            while(p < ab0[j][k]){
                                p = ab0[j][k];
                                z = j;
                            }
                            j++;
                        }
                //zeilentauschung (Pivotzeile nach oben)
                        double dummy;
                        for(int s=k; s < n; s++){                   
                            dummy = ab0[z][s];
                            ab0[z][s] = ab0[k][s];
                            ab0[k][s] = dummy;
                        }
                        double pq;   

                        for(j = k+1; j<m; j++){
                //Pivotqotient bilden
                            pq = ab0[j][k]/p;
                //neue Zeilenelemente           
                            for(z = k; z<n; z++){
                                ab0[j][z] = ab0[j][z]-pq*ab0[k][z];
                            }
                        }   
                    }   
                }
                return ab0;
            }
}

Ich muss irgendwo ausversehen mein ab überschreiben. Ich find aber nicht wo oder wie. Ich dachte es sei "fest"
Das "setAb() in LGS hab ich erst dazu gefügt. Brachte aber auch nix. Vorher hatte ich this.ab=ab_lgs; direkt im Konstruktor stehen.
Ich habe jetzt versucht alles nochmal umzubenennen. vorher hieß es in der Übergabe immer ab. Jetzt sind es ab_lgs (in LGS) und ab0 (in Loesung) aber das hat es auch nicht gelöst. ö.ö

Wenn ich mir ab ausgeben lasse, ist es wie gesagt schon das in Dreiecksform was ich (dachte ich) gar nicht direkt speichere/ erzeuge. :(
Irgendwo ist bestimmt ein banaler Fehler...
 
X

Xyz1

Gast
Gestaltungstipps und Architekturproblemetipps darf ich geben, Programmlogik bei dir ;)

GridLayout
GridLayout
FlowLayout
BorderLayout
 

spinneimnetz

Mitglied
Soooo,
ich kam leider nicht eher dazu noch mal zu schreiben. Aber wollt euch noch einen Statusbericht geben.
Ich habe das Porgramm Freitag Vormittag abgegeben. "Verteidigung" ist erst am 25.09. Da gibts dann die Note.

Leider hatte ich weder den Fehler gefunden noch konnte ich die GUI aufhübschen. Ich musste noch einige Dokumente anfertigen, die mit geliefert werden sollten. Das hat gedauert.. bis irgendwann nach 1:00Uhr. Dann ging nix mehr.
Habe in die Kurzbeschreibung auch aufgeschrieben was noch nicht richtig stimmt und werde versuchen den Fehler trotzdem noch zu finden. Dann kann ich es zur Verteidung dann auch sagen.
Werde also noch etwas daran rumbasteln. (Programmieren macht ja doch irgendwie spaß XD) Melde mich dann bei Bedarf wieder.

(Mein Thema-Titel ist nun recht irreführend. Hatte ja doch nix mit Vererbung zu tun :oops:)

Danke nochmal für die Hilfe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Variablen Klassenübergreifend nutzen Java Basics - Anfänger-Themen 18
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
D Wie kann Variablen,Methoden Klassenübergreifend zugreifen? Java Basics - Anfänger-Themen 4
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
L Variablen dekleration + reset Java Basics - Anfänger-Themen 16
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
P Variablen in Excel speichern Java Basics - Anfänger-Themen 6
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
L zwei Variablen gleichzeitig übergeben Java Basics - Anfänger-Themen 6
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
S OOP Werte von Vektoren mit 3 Variablen ausgeben lassen Java Basics - Anfänger-Themen 3
A Variablen aus einer Schleife gezielt auslesen Java Basics - Anfänger-Themen 11
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
K Enigma, variablen übernehmen Java Basics - Anfänger-Themen 6
F Erste Schritte Dynamische Variablen Java Basics - Anfänger-Themen 15
N Variablen zurück casten Java Basics - Anfänger-Themen 3
M Repräsentation von variablen/OOP Java Basics - Anfänger-Themen 2
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben