Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: Java (Problem mit einfachem Programm)

  1. #1
    Moderator
    Registriert seit
    09.05.2001
    Ort
    Essen
    Beiträge
    26

    Java (Problem mit einfachem Programm)

    Also ich muss für die Uni die folgende Aufgabe lösen: http://www.angewandteinformatik.de/s...v?id=swt000896

    Also brauche ich eine Fachkonzeptklasse und eine GUI die darauf zugreift.

    Der nächste Schritt wäre dann eine lesende Operation in der Form, das man als Eingangsatribute X und Y wählt und jeweils die Zeilen abrastert und die Atributwerte abfragt. Diese sollen in die Textarea der GUI rein. Wie gebe ich denn in der Textarea an, das er in die nächste Zeile springen soll, damit ich die zweite Zeile schreiben kann ?

    Also ich denke mal ich gehe die Zeilen von 1 bis n und dann jeweils die Spalten von 1 bis n durch und lasse nacheinander die Zahlen von 1 bis n*n eintragen. Dazu nehme ich das schreiben natürlich ins Applett und die Lesende Operation welche Zahl an der zweiten Stelle steht natürlich aus der Fachkonzeptklasse.

    Denke mal das muss so laufen:

    - while (n*n <= laufn)
    - wert = lese (zeile 1,spalte 1)
    - setze laufn = laufn+1
    - schreibe wert + " "

    Und dann muss er aber den nächsten Wert dahinter schreiben. Macht er das oder löscht er das Feld ?

    - Und wenn die mit den Spalten bei n bin, muss er umschalten auf Zeile 2, also in die nächste Zeile des TextBereichs springen.

    Wie macht man das ?



    Die GUI muss auch noch prüfen ob die Zahl n ungerade ist. Wie frage ich das denn ab ? if (n ungerade) {...}

    Wie gebe ich das an ?


    Hier mal meine Fachkonzeptklasse (erst mal nur mit der Matrixberechnung):

    public class magischesQuadrat
    {
    int n;
    int laufn = 1;
    int [][]Matrix;

    public void berechneQuadrat(int zahl)
    {
    int MerkeSpalte;
    int MerkeZeile;
    int halbn;

    n = zahl;
    halbn = n/2;

    Matrix = new int [n][n];

    MerkeSpalte = halbn;
    MerkeZeile = 1;
    Matrix[MerkeSpalte][MerkeZeile] = 1;

    while (laufn <= n)
    {
    {if (MerkeZeile == 1)
    MerkeZeile = n;
    else
    MerkeZeile = MerkeZeile - 1;}

    {if (MerkeSpalte == n)
    MerkeSpalte = 1;
    else
    MerkeSpalte = MerkeSpalte + 1;}

    {if ((Matrix[MerkeSpalte][MerkeZeile]) == 0)
    {if (MerkeZeile == n)
    MerkeZeile = 1;
    else
    MerkeZeile = MerkeZeile - 1;}

    Matrix[MerkeSpalte][MerkeZeile] = laufn;}
    }
    }

    }

    Hoffe das ist in Ordnung so.
    Geändert von hunter (23-04-2003 um 09:24 Uhr)

  2. #2
    Moderator
    Registriert seit
    09.05.2001
    Ort
    Essen
    Beiträge
    26
    Da ist mir noch was eingefallen:

    halbn = n/2;

    Beispiel:

    n = 5

    Da kämen 5 / 2 = 2,5 raus. Dieses Feld gibt es aber nicht, also muss es aufgerundet werden zu 3.

    Macht er das automatisch, da halbn als int deklariert ist oder muss ich da noch was machen ?

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.09.2000
    Ort
    Schweiz
    Beiträge
    142
    Hi,

    irgendwie komme ich nicht auf die Page und deine Beschreibung habe ich nicht wirklich kapiert...zu den verschiendenen Problemen:

    Gerade/Ungerade: Dazu kannst du Modulo verwenden. Also:

    Code:
    if (5%2 != 0)
    {
       System.out.println("ungerade!");
    }
    Runden: Ich glaube Java rundet .5er Werte automatisch ab. 5/2 gibt also 2.

    Ich werde mich später noch einmal melden. Muss jetzt erst mal was arbeiten!

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    zum runden musst du perfiderweise
    Code:
    int i = java.lang.Math.round(Double d);
    verwenden...

    ein expliziter Cast von Double nach Int (oder auch nach Long) schneidet einfach die Nachkommastellen ab

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer
    Registriert seit
    11.09.2000
    Ort
    Schweiz
    Beiträge
    142
    @peschmae

    Stimmt

  6. #6
    Moderator
    Registriert seit
    09.05.2001
    Ort
    Essen
    Beiträge
    26
    Danke.

    Der Link den ich da angebe ist eine PDF Datei. Man braucht also ein entsprechendes Browser Plugin.


    Habe jetzt weiter geschrieben und so sieht das nun aus (unten erkläre ich was noch Probleme macht):

    public class magischesQuadrat
    {
    int n;
    int laufn = 1;
    int [][]Matrix;

    int MerkeSpalte;
    int MerkeZeile;
    int MerkeWert;

    public void berechneQuadrat(int zahl)
    {
    int halbn;

    n = zahl;
    halbn = n/2;

    Matrix = new int [n][n];

    MerkeSpalte = halbn;
    MerkeZeile = 1;
    Matrix[MerkeSpalte][MerkeZeile] = 1;

    while (laufn < n)
    {
    {if (MerkeZeile == 1)
    MerkeZeile = n;
    else
    MerkeZeile = MerkeZeile - 1;}

    {if (MerkeSpalte == n)
    MerkeSpalte = 1;
    else
    MerkeSpalte = MerkeSpalte + 1;}

    {if ((Matrix[MerkeSpalte][MerkeZeile]) == 0)
    {if (MerkeZeile == n)
    MerkeZeile = 1;
    else
    MerkeZeile = MerkeZeile - 1;}

    Matrix[MerkeSpalte][MerkeZeile] = laufn;}

    laufn = laufn + 1;
    }
    }

    int Matrixwert(int Zeilex, int Spaltex)
    {
    MerkeZeile = Zeilex;
    MerkeSpalte = Spaltex;

    MerkeWert = Matrix[MerkeSpalte][MerkeZeile];
    return MerkeWert;
    }
    }

    Oben seht ihr noch immer halbn = n/2, das muss ich noch korregieren.

    Habe dann ein Applet mit Textarea ("Textbereich") ein Eingabe Feld und einen Button generiert. Das Button Klick Ereignis macht folgendes:


    private void button1ActionPerformed(java.awt.event.ActionEvent evt) {
    Integer i1 = Integer.valueOf(textField1.getText());
    int n = i1.intValue();

    {if (n < 0)
    {Textbereich.setText("");
    Textbereich.setText("n muss positiv sein !!");}
    else
    {if (n % 2 == 0)
    {Textbereich.setText("");
    Textbereich.setText("n muss ungerade sein !!");}
    else
    {int Spalte = 0;
    int Zeile = 0;
    int Wert;

    while(Zeile < n)
    {
    while(Spalte < n)
    {
    {Wert = Matrixwert(Zeile,Spalte);
    Textbereich.append(Wert + " ");
    Spalte = Spalte + 1;}
    Zeile = Zeile + 1;
    Spalte = 0;
    Textbereich.append("/n");
    }
    }
    }
    }
    }
    }

    Ich weiß das noch ein Fehler drin ist. Und zwar muss Wert (der aus Matrixwert kommen sollte) zuerst in String umgewandelt werden damit das Textbereich.append überhaupt funktioniert.

    Aber vorher habe ich ein anderes Problem:

    magischesQuadratGUI.java [79:1] cannot resolve symbol
    symbol : method Matrixwert (int,int)
    location: class magischesQuadratGUI
    {Wert = Matrixwert(Zeile,Spalte);
    ^
    1 error
    Errors compiling Project magischesQuadrat.

    Könnt ihr mir bitte erklären was das Problem ist ? Er müsste die Operation jedenfalls kennen, da sie zu einem Projekt gehören und ich auch gleich das ganze Projekt compiliere.

    Und die Werte für Zeile und Spalte sind Integer und vorher festgelegt.

  7. #7
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Ich habe das Gefühl, dass da eine Klammer ({) zu viel ist:

    {Wert = Matrixwert(Zeile,Spalte);
    Weitere Fehlermöglichkeiten:
    - Ist die Klasse magischesQuadrat bereits kompiliert?
    - Ist sie im gleichen Verzeichnis wie das Applet?

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  8. #8
    Moderator
    Registriert seit
    09.05.2001
    Ort
    Essen
    Beiträge
    26
    Also das dieser PFeil auf die Klammer zeigt liegt nur am Forum. Der compiler meint das Matrix.

    Ich hab jetzt noch mal was geändert:

    public class magischesQuadrat
    {
    int n;
    int laufn;
    int [][]Matrix;

    int MerkeSpalte;
    int MerkeZeile;
    int MerkeWert;

    public void berechneQuadrat(int zahl)
    {
    n = zahl;

    double i = java.lang.Math.round((double) (n/2));
    int halbn = (int) i;

    Matrix = new int [n][n];

    MerkeSpalte = halbn;
    MerkeZeile = 0;
    Matrix[MerkeSpalte][MerkeZeile] = 1;

    laufn = 0;

    while (laufn < n)
    {
    {if (MerkeZeile == 1)
    MerkeZeile = n;
    else
    MerkeZeile = MerkeZeile - 1;}

    {if (MerkeSpalte == n)
    MerkeSpalte = 1;
    else
    MerkeSpalte = MerkeSpalte + 1;}

    {if ((Matrix[MerkeSpalte][MerkeZeile]) == 0)
    {if (MerkeZeile == n)
    MerkeZeile = 1;
    else
    MerkeZeile = MerkeZeile - 1;}

    Matrix[MerkeSpalte][MerkeZeile] = laufn;}

    laufn = laufn + 1;
    }
    }

    public int getMatrixwert(int Zeile, int Spalte)
    {
    MerkeZeile = Zeile;
    MerkeSpalte = Spalte;

    MerkeWert = Matrix[MerkeSpalte][MerkeZeile];
    return MerkeWert;
    }
    }



    private void button1ActionPerformed(java.awt.event.ActionEvent evt) {
    berechneQuadrat(Integer.valueOf(textField1));

    Integer i1 = Integer.valueOf(textField1.getText());
    int n = i1.intValue();

    {if (n < 0)
    {Textbereich.setText("");
    Textbereich.setText("n muss positiv sein !!");}
    else
    {if (n % 2 == 0)
    {Textbereich.setText("");
    Textbereich.setText("n muss ungerade sein !!");}
    else
    {int Spalte = 0;
    int Zeile = 0;
    int Wert;

    while(Zeile < n)
    {
    while(Spalte < n)
    {
    {Wert = getMatrixwert(Zeile,Spalte);
    Textbereich.append(String.valueOf(Wert) + " ");
    Spalte = Spalte + 1;}
    Zeile = Zeile + 1;
    Spalte = 0;
    Textbereich.append("/n");
    }
    }
    }
    }
    }

    }


    Fehlermeldungen:

    magischesQuadratGUI.java [60:1] cannot resolve symbol
    symbol : method valueOf (java.awt.TextField)
    location: class java.lang.Integer
    berechneQuadrat(Integer.valueOf(textField1));
    ^
    magischesQuadratGUI.java [81:1] cannot resolve symbol
    symbol : method getMatrixwert (int,int)
    location: class magischesQuadratGUI
    {Wert = getMatrixwert(Zeile,Spalte);
    ^
    2 errors
    Errors compiling Project magischesQuadrat.

    Warum zur kann ich diese beiden Methoden denn nun nicht so verwenden ?
    Geändert von hunter (23-04-2003 um 18:02 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    11.09.2000
    Ort
    Schweiz
    Beiträge
    142
    Kannst du bitte mal das ganze Programm hochladen? Wäre viel einfacher den Fehler zu finden. Ach ja, um den Text eines Textfeldes auszulesen kannst du die getText() eigenschaft benutzen. Wenn du einfach nur das Objekt angibts bekommst du auch das Objekt.

  10. #10
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    nochwas, code bitte entweder mit codetags [#] oder als textfiles hochladen

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  11. #11
    Moderator
    Registriert seit
    09.05.2001
    Ort
    Essen
    Beiträge
    26
    Ich habe es jetzt hinbekommen. Der Fehler war das ich in der einen Klasse zwar ein Matrix Objekt erzeuge, dies aber dann nicht in der GUI verwenden kann. Also muss ich es dort noch mal als eigenes Objekt deklarieren auf das dann die Methoden zugreifen können.

    Hänge das Spaßeshalber mal an. Dann könnt ihr einfache magische Quadrate damit ausrechnen lassen.

    ACHTUNG: Die Endung .zip ist nach .tar.gz umzubennenen (lies sich sonst nicht hochladen)

  12. #12
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Scheint mehr oder weniger zu funktionieren:

    Jedoch: ist es Absicht, dass keine geraden Zahlen eingegeben werden können und wenn ja, doch bitte richtig beschriften!!!

    Zusätzlich kam bei mir eine relativ spezielle Anzeige zustande, deren Schuld jedoch wohl mehr bei meinem Browser liegen wird:

    Bild einfach mal anschauen:

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  13. #13
    Moderator
    Registriert seit
    09.05.2001
    Ort
    Essen
    Beiträge
    26
    Hmm. Welchen Browser und welche Java Version hast du denn ?

    Der Algorythmus funktioniert so:

    - erste Zeile, mittleres Feld: 1 setzen
    - ein Feld hoch und eins nach rechts gehen
    -- wenn schon in Zeile 0, dann in n-1 springen
    -- wenn schon in Spalte n-1, dann in 0 springen
    - wenn angesprungenes Feld schon eine Zahl hat, dann genau eine Zeile unter dem letzten Feld die nächste schreiben

    Das ganze dann mit den Zahlen von 1 bis n^2 durchlaufen, da es ja ein nxn Quadrat ist.


    Ein Quadrat kann nicht negative Zeilen oder Spalten haben, weshalb nur n > 0 erlaubt ist. Desweiteren haben gerade Zahlen keine mittlere ganze Zahl.

    3 = 1 2 3 -> Mitte: 2
    4 = 1 2 3 4 -> Mitte: zwischen 2 und 3, also 2,5 was bei einer Matrix nicht geht

    Daher der Hinweis das man ein ungerades und positives n eingeben muss. Außerdem würde er bei geraden und negativen Zahlen eine Fehlermeldung ausgeben.


    Insofern ist es doch richtig beschriftet.
    Geändert von hunter (25-04-2003 um 17:58 Uhr)

  14. #14
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Bei mir steht im Programm:

    Bitte ein gerades und positives n angeben:
    Wenn ich nun die 4 eingebe, so kommt die Fehlermeldung:

    n muss ungerade sein !!
    Dies ist doch wohl ein Wiederspruch?!

    Und zu Browser und Java:
    -IE 5.5
    -Java 1.4.1.02

    Normalerweise funktioniert alles richtig, fand nur gerade dieses eine Mal die Anzeige lustig und habe Screenshot gemacht!

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  15. #15
    Moderator
    Registriert seit
    09.05.2001
    Ort
    Essen
    Beiträge
    26
    Huups. Da ist das Label falsch beschriftet. Naja, Praktikum ist vorbei und das ist so durchgegangen.


    Also ich habe Java 1.4.1, Firebird 0.5 Nighly unter Mandrake 9.0. Und da sieht alles normal und richtig aus.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •