Abend Leute!
Ich stelle übermorgen während meines Mathevortrages (über GAUß) mein Programm vor, dass Gaußsche Eleminierungsverfahren.
Jedoch will ich mit einbauen, dass man über "Datei"> "Neu" sich der Frame neu lädt, bzw. die Textfelder wieder weg sind, alle Werte auf Ursprung sind.
Mit "removeAll" hat det gefunzt, aber er hat zu viel weggenommen.
Hier der Quelltext:
Nen Kumpel meinte, ich sollte mit Boolean arbeiten... hab ich aber noch net gemacht.
Bitte um Hilfe, wirklich. Davon hängt ne gute Mathezensur hab.
Würd mich über Antwort freuen
Greetz Eric
Ich stelle übermorgen während meines Mathevortrages (über GAUß) mein Programm vor, dass Gaußsche Eleminierungsverfahren.
Jedoch will ich mit einbauen, dass man über "Datei"> "Neu" sich der Frame neu lädt, bzw. die Textfelder wieder weg sind, alle Werte auf Ursprung sind.
Mit "removeAll" hat det gefunzt, aber er hat zu viel weggenommen.
Hier der Quelltext:
Code:
import java.awt.*;
import java.awt.event.*;
import java.math.*;
public class gaussele
extends Frame
implements Runnable,ItemListener,WindowListener,ActionListener{
double [][] kosystem=null;
double [][] backup=null;
Label [][] label=null;
TextField [][] tfarr=null;
double [] ergx=null;
int vorwmax=4;
Label [] vorwort=new Label[vorwmax];
Button b1=new Button("Lösen");
Label l1=new Label("Anz. d. Gleichungen:");
Label l2=new Label("");
Label error=new Label("");
Choice groesse=new Choice();
int tfx=50;
int tfy=150;
int lx=75;int lbreite=26;
int ly=152;int lhoehe=20;
int breite=25;
int hoehe=20;
static int zahl=0;
int ei=0;
int ezeile=0;
int espalte=0;
int anz=1;
int nullzeile=1;
int spaltenbed=0;
int chx=150;
int chy=120;
int chw=40;
int chh=20;
int erwx=0;
int erwy=0;
int wegx=50;
int wegy=150;
int kox=wegx;
Panel main=new Panel();
ScrollPane pane=new ScrollPane();
MenuBar mb=new MenuBar();
Menu dateimenu=new Menu("Datei");
Menu ansichtmenu=new Menu("Ansicht");
MenuItem dit1=new MenuItem("Neu");
MenuItem dit2=new MenuItem("Schließen");
MenuItem ait1=new MenuItem("Koeffiz. Sys.");
MenuItem ait2=new MenuItem("Lösungsweg Off");
MenuItem ait3=new MenuItem("Farben");
Font tf=new Font("Arial",Font.BOLD,12);
Font l=new Font("Arial",Font.PLAIN,10);
Font b=new Font("Arial",Font.BOLD,12);
int bedweg=0;
public gaussele(){
super("Gauß'sches Eleminierungsverfahren");
addWindowListener(this);
//mouseaction ma=new mouseaction(this);
//b1.addMouseListener(ma);
b1.addActionListener(this);
dateimenu.add(dit1);
dateimenu.add(dit2);
ansichtmenu.add(ait1);
ansichtmenu.add(ait2);
ansichtmenu.add(ait3);
mb.add(dateimenu);
mb.add(ansichtmenu);
this.setMenuBar(mb);
dit1.addActionListener(this);
dit2.addActionListener(this);
ait1.addActionListener(this);
ait2.addActionListener(this);
ait3.addActionListener(this);
main.setLayout(null);
main.setBounds(0,0,980,700);
pane.add(main);
this.add(pane);
main.setBackground(new Color(80,80,80));
main.setForeground(new Color(255,255,255));
Font f=new Font("Arial",Font.PLAIN,12);
main.setFont(f);
l1.setBounds(25,120,120,20);groesse.setBounds(chx,chy,chw,chh);
l2.setBounds(chx,chy,chw-10,chh);
main.add(l1);main.add(groesse);main.add(l2);
l2.setVisible(false);
l2.setAlignment(1);
groesse.setVisible(true);
groesse.addItemListener(this);
groesse.add("3");
groesse.add("4");
groesse.add("5");
groesse.add("6");
groesse.add("7");
groesse.add("8");
groesse.add("9");
groesse.add("10");
groesse.setBackground(new Color(0,0,0));
groesse.setForeground(new Color(255,255,255));
b1.setBackground(new Color(100,100,100));
b1.setForeground(new Color(204,187,136));
b1.setFont(b);
b1.setBounds(225,120,75,20);
main.add(b1);
b1.setVisible(false);
error.setForeground(new Color(225,0,0));
Font fm=new Font("Verdana",Font.BOLD,12);
error.setFont(fm);
error.setAlignment(1);
ini_vorwort();
}
public void windowClosing(WindowEvent e){
System.exit(0);
this.dispose();
}
public void windowOpened(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void mouseReleased(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mosueExited(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void itemStateChanged(ItemEvent event){
zahl=new Integer(groesse.getSelectedItem()).intValue();
groesse.setVisible(false);
ini_arrays(zahl);
b1.setVisible(true);
l2.setText(""+zahl);
l2.setVisible(true);
}
public void actionPerformed(ActionEvent e){
if (e.getActionCommand().equals("Lösen")){
String bedingung=control_emptytf();
if (bedingung.equals("")){
error.setVisible(false);
convert_komma();
read_tf();
loesen();
}else{
error.setText(bedingung);
error.setBounds(25,tfy+20,390,20);
main.add(error);
}
}
if (e.getActionCommand().equals("Schließen")){
this.dispose();
}
if (e.getActionCommand().equals("Neu")){
}
//Lösungsweg AN/AUS
if (e.getActionCommand().equals("Lösungsweg On")){
bedweg=0;
System.out.println(bedweg);
ait2.setLabel("Lösungsweg Off");
}
if (e.getActionCommand().equals("Lösungsweg Off")){
bedweg=1;
System.out.println(bedweg);
ait2.setLabel("Lösungsweg On");
}
//Ende
}
public void AniRun(){
Thread th=new Thread(this);
th.run();
}
public void run(){}
public static void main(String[] argv){
gaussele pro=new gaussele();
pro.setSize(1024,768);
pro.setVisible(true);
}
void show_result(){
pause(1000);
int s=0;
int xs=1;
int showx=wegx;
int showy=wegy+(80*(zahl-1))+(zahl*20)+45;
Label wertung=new Label("Lösungen lauten:");
wertung.setBounds(showx,showy,100,20);
main.add(wertung);
showx=showx+115;
while (s<zahl){
pause(1250);
String ergebnis="x"+xs+" = "+trennen(ergx[s]);
Label e=new Label(ergebnis);
e.setBounds(showx,showy,150,20);
main.add(e);
s++;
xs++;
showy=showy+20;
}
}
void ausrechnen(){
int zh=zahl-1;
int sh=zahl;
int zeile=zahl-1;
int spalte=zahl-1;
int i=zahl;
while (i>0){
if (i==zahl){
double e=kosystem[zh][sh]/kosystem[zeile][spalte];
ergx[i-1]=e;
zh--;
i--;
zeile--;
spalte--;
}else{
double e=(kosystem[zh][sh]-term(zeile))/kosystem[zeile][spalte];
ergx[i-1]=e;
zh--;
zeile--;
spalte--;
i--;
}
}
show_result();
}
void erweitern(){
int zeile=ezeile;
while(zeile>=0){
kosystem[zeile][espalte]=kosystem[zeile][espalte]*ergx[ei];
zeile--;
}
ezeile--;
espalte--;
ei--;
}
double term(int z){
erweitern();
int l=0;
int spalte=zahl-1;
double zeilensumme=0;
while (l<anz){
zeilensumme=zeilensumme+kosystem[z][spalte];
spalte--;
l++;
}
anz++;
return zeilensumme;
}
static String trennen(double wert){
String zahlen=""+wert;
int laenge=zahlen.length();
int i=0;
int s=0;
String anz_vor="";
String anz_nach="";
String stellen="";
int bed=0;
int max=4;
String rueckgabe="";
while (i<laenge){
String zahl=zahlen.substring(i,i+1);
if (zahl.equals(".")){
bed=1;
zahl="";
}
if (bed==0){
anz_vor=anz_vor+zahl;
}
if (bed==1){
anz_nach=anz_nach+zahl;
}
i++;
}
int klaenge=anz_nach.length();
if (klaenge>4){
while (s<max){
String zahl=anz_nach.substring(s,s+1);
stellen=stellen+zahl;
s++;
}
rueckgabe=anz_vor+"."+stellen;
}else{
rueckgabe=anz_vor+"."+anz_nach;
}
return rueckgabe;
}
String gen_z(int z,int bed){
String rueckgabe="";
String ebene="";
if (bed==1){
ebene=(z+1)+" ] ";
}else{
ebene="N ] ";
}
int spalte=0;
int x=1;
while (spalte<(zahl+1)){
String add=trennen(kosystem[z][spalte]);
if (spalte==zahl){
rueckgabe=rueckgabe+add;
spalte=zahl+1;
x++;
}else{
if (spalte==(zahl-1)){
rueckgabe=rueckgabe+add+" x"+x+" = ";
x++;
spalte++;
}else{
rueckgabe=rueckgabe+add+" x"+x+" + ";
x++;
spalte++;
}
}
}
return ebene+rueckgabe;
}
void loesen(){
int tiefe=zahl-1;
int stelle=0;
int spalte=0;
int zeile=0;
int mzeile=0;
int ezeile=0;
int i=0;
erwx=65*(zahl+1)+40;
erwy=150;
int ytiefe=wegy;
int xtiefe=wegx;
while (stelle<zahl){
while (zeile<tiefe){
if (zeile==(tiefe-1)){ ezeile=(zahl-1); }
else{ ezeile++; }
double multizahl=kosystem[zeile+1][stelle]/kosystem[stelle][stelle];
multizeile(mzeile,multizahl);
//Erweitern mit Multizahl
Label l=new Label("| *"+multizahl);
l.setBounds(erwx,erwy,45,20);
main.add(l);
erwx=erwx+50;
pause(1000);
//Erweiterte Zeile
String mzausgabe=gen_z(mzeile,1);
String ezausgabe=gen_z(ezeile,1);
Label zm=new Label(mzausgabe);
Label ze=new Label(ezausgabe);
zm.setBounds(xtiefe,ytiefe,(75*(zahl+1)),20);
ze.setBounds(xtiefe,ytiefe+20,(75*(zahl+1)),20);
main.add(zm);main.add(ze);
//Zeile eleminieren
zeileeleminieren(ezeile);
String ez_neu=gen_z(ezeile,0);
Label showez=new Label(ez_neu);
showez.setBounds(xtiefe,ytiefe+40,(75*(zahl+1)),20);
main.add(showez);
backupline();
zeile++;
nullzeile++;
ytiefe=ytiefe+80;
}
if (stelle==(zahl-1)){}
else{ showkosys(); }
backupline();
xtiefe=xtiefe+(75*(zahl+1))+20;
ytiefe=wegy;
i=1;
stelle++;
mzeile++;
zeile=stelle;
ezeile=stelle;
nullzeile=1;
spaltenbed++;
}
ausrechnen();
}
void zeileeleminieren(int wert){
int ezeile=wert;
int espalte=0;
if (kosystem[ezeile-1][spaltenbed]>0){
if (kosystem[ezeile][spaltenbed]>0){
while (espalte<(zahl+1)){
System.out.println(kosystem[ezeile][espalte]+" = "+kosystem[ezeile-nullzeile][espalte]+" - "+kosystem[ezeile][espalte]);
kosystem[ezeile][espalte]=kosystem[ezeile-nullzeile][espalte]-kosystem[ezeile][espalte];
espalte++;
}
}else{
while (espalte<(zahl+1)){
System.out.println(kosystem[ezeile][espalte]+" = "+kosystem[ezeile-nullzeile][espalte]+" + "+kosystem[ezeile][espalte]);
kosystem[ezeile][espalte]=kosystem[ezeile-nullzeile][espalte]+kosystem[ezeile][espalte];
espalte++;
}
}
}else{
if (kosystem[ezeile][spaltenbed]<0){
while (espalte<(zahl+1)){
System.out.println(kosystem[ezeile][espalte]+" = "+kosystem[ezeile-nullzeile][espalte]+" - "+kosystem[ezeile][espalte]);
kosystem[ezeile][espalte]=kosystem[ezeile-nullzeile][espalte]-kosystem[ezeile][espalte];
espalte++;
}
}else{
while (espalte<(zahl+1)){
System.out.println(kosystem[ezeile][espalte]+" = "+kosystem[ezeile-nullzeile][espalte]+" - "+kosystem[ezeile][espalte]);
kosystem[ezeile][espalte]=kosystem[ezeile-nullzeile][espalte]-kosystem[ezeile][espalte];
espalte++;
}
}
}
}
void backupline(){
int bzeile=0;
int bspalte=0;
while (bspalte<(zahl+1)){
kosystem[bzeile][bspalte]=backup[bzeile][bspalte];
bspalte++;
}
}
void multizeile(int wert1,double wert2){
double multizahl=wert2;
int mzeile=wert1;
int spalte=0;
while (spalte<(zahl+1)){
kosystem[mzeile][spalte]=kosystem[mzeile][spalte]*multizahl;
spalte++;
}
}
void showkosys(){
int zeile=0;
int koy=wegy+(80*(zahl-1))+5;
Label satz=new Label("Gleichungssystem nach Erweiterung:");
satz.setBounds(kox,koy,(75*(zahl+1)),20);
main.add(satz);
koy=koy+25;
while (zeile<zahl){
String line="";
int spalte=0;
int x=1;
while (spalte<(zahl+1)){
if (spalte==zahl){
line=line+trennen(kosystem[zeile][spalte]);
}else{
if (spalte==(zahl-1)){
line=line+trennen(kosystem[zeile][spalte])+" x"+x+" = ";
}else{
line=line+trennen(kosystem[zeile][spalte])+" x"+x+" + ";
}
}
spalte++;
x++;
}
Label l=new Label(+(zeile+1)+" ] "+line);
l.setBounds(kox,koy,(75*(zahl+1)),20);
main.add(l);
koy=koy+20;
zeile++;
}
kox=kox+(75*(zahl+1))+20;
}
void read_tf(){
int zeile=0;
int spalte=0;
while ((zeile<zahl)&&(spalte<(zahl+1))){
String tf=tfarr[zeile][spalte].getText();
double tfzahl=new Double(tf).doubleValue();
kosystem[zeile][spalte]=tfzahl;
backup[zeile][spalte]=tfzahl;
spalte++;
if (spalte==(zahl+1)){
spalte=0;
zeile++;
}
}
}
void ini_arrays(int wert){
kosystem=new double[wert][wert+1];
backup=new double[wert][wert+1];
ergx=new double[wert];
ezeile=zahl-2;
espalte=zahl-1;
ei=zahl-1;
label=new Label[wert][wert];
ini_labelarr(wert);
tfarr=new TextField[wert][wert+1];
ini_tfarr(wert);
show_tf(wert);
show_label(wert);
}
void show_label(int wert){
int zeile=0;
int spalte=0;
while ((zeile<wert)&&(spalte<wert)){
label[zeile][spalte].setBounds(lx,ly,lbreite,lhoehe);
main.add(label[zeile][spalte]);
label[zeile][spalte].setFont(l);
label[zeile][spalte].setAlignment(1);
lx=lx+50;
spalte++;
if (spalte==wert){
spalte=0;
zeile++;
lx=tfx+25;
ly=ly+30;
}
}
}
void show_tf(int wert){
int zeile=0;
int spalte=0;
while ((zeile<wert)&&(spalte<(wert+1))){
tfarr[zeile][spalte].setBounds(tfx,tfy,breite,hoehe);
tfarr[zeile][spalte].setBackground(new Color(0,0,0));
tfarr[zeile][spalte].setForeground(new Color(255,255,255));
tfarr[zeile][spalte].setFont(tf);
main.add(tfarr[zeile][spalte]);
tfx=tfx+50;
spalte=spalte+1;
if (spalte==(wert+1)){
spalte=0;
zeile=zeile+1;
tfx=50;
tfy=tfy+30;
wegy=wegy+30;
}
}
wegy=wegy+10;
}
void ini_labelarr(int wert){
int zeile=0;
int spalte=0;
int i=1;
while ((zeile<wert)&&(spalte<wert)){
if (spalte==(wert-1)){
label[zeile][spalte]=new Label("x"+i+" =");
spalte=0;
i=1;
zeile++;
}
else{
label[zeile][spalte]=new Label("x"+i+" +");
spalte++;
i++;
}
}
}
void ini_tfarr(int wert){
int zeile=0;
int spalte=0;
while ((zeile<wert)&&(spalte<(wert+1))){
tfarr[zeile][spalte]=new TextField("");
spalte++;
if (spalte==(wert+1)){
spalte=0;
zeile++;
}
}
}
void pause(int wert){
try{Thread.sleep(wert);}
catch (InterruptedException e){}
}
String control_emptytf(){
int zeile=0;
int spalte=0;
String fehler="";
while ((zeile<zahl)&&(spalte<(zahl+1))){
String tf=tfarr[zeile][spalte].getText();
if (tf.equals("")){
fehler="Leeres Textfeld: "+(zeile+1)+". Zeile / "+(spalte+1)+". Spalte";
spalte=zahl;
zeile=zahl;
}else{
spalte++;
if (spalte==(zahl+1)){
zeile++;
spalte=0;
}
}
}
return fehler;
}
void convert_komma(){
int zeile=0;
int spalte=0;
while ((zeile<zahl)&&(spalte<(zahl+1))){
String zahlen=tfarr[zeile][spalte].getText();
String rueckgabe="";
int stelle=0;
int laenge=zahlen.length();
while (stelle<laenge){
String bu=zahlen.substring(stelle,stelle+1);
if (bu.equals(",")){
bu=".";
}
rueckgabe=rueckgabe+bu;
stelle++;
}
tfarr[zeile][spalte].setText(rueckgabe);
spalte++;
if (spalte==zahl){
zeile++;
spalte=0;
}
}
}
void ini_vorwort(){
int i=0;
while (i<vorwmax){
vorwort[i]=new Label("");
i++;
}
vorwort[0].setText("Lösungen des lineares Gleichungssystem werden wie folgt berechnet:");
vorwort[1].setText("a(1,1) * x(1) + ... + a(1,n) * x(n) = b(1)");
vorwort[2].setText(". . . . . .");
vorwort[3].setText("a(n,1) * x(1) + ... + a(n,n) * x(n) = b(n)");
i=0;
int vorwx=25;
int vorwy=10;
int vorww=390;
int vorwh=20;
while (i<vorwmax){
vorwort[i].setBounds(vorwx,vorwy,vorww,vorwh);
if (i>0){
vorwort[i].setAlignment(1);
}
main.add(vorwort[i]);
i++;
vorwy=vorwy+20;
}
}
}
Nen Kumpel meinte, ich sollte mit Boolean arbeiten... hab ich aber noch net gemacht.
Bitte um Hilfe, wirklich. Davon hängt ne gute Mathezensur hab.
Würd mich über Antwort freuen
Greetz Eric