Studium, Ausbildung und Beruf
 StudiumHome   FAQFAQ   RegelnRegeln   SuchenSuchen    RegistrierenRegistrieren   LoginLogin

Java Problem
Neues Thema eröffnen   Neue Antwort erstellen
Foren-Übersicht -> Informatik-Forum -> Java Problem
 
Autor Nachricht
Underworld
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 18.03.2008
Beiträge: 60

BeitragVerfasst am: 17 Okt 2009 - 15:26:36    Titel: Java Problem

Hi, ich bin Java Anfänger (habe seit 4 Wochen Grundkurs Informatik) und möchte einen Funktionsplotter schreiben.

Gerade bin ich am Koordinatensystem und habe diesen Code, der nicht funktioniert:
for ( int a = 1; a <= 20; a++ ) {
for ( int b = 1; b<= 10; b++)
{
g.drawString(b,a,415);
}

}

Warum, dass nicht funktioniert, ist mir jetzt nach nen bisschen überlegen klar. Im drawstring Befehl, brauch ich ja für den Text auch einen String Wert. Jedoch gibt mir die 2te for Schleife keinen String Wert, sondern einen int Wert.

Hat jemand von euch Ahnung, wie ich das hinbekomme?

Falls ihr noch Hintergrunde zu dem Teilcode braucht. Mein Hintergrundgedanke war, dass ich die x-Achse durchnummeriere. Von 0 - 20. Ich habs zwar schon geschafft, dass die Achse alle 40 Pixel mit dem Text 1 durchnummeriert wird, das sich die Zahl 1, aber erhöht ist bis jetzt noch nicht möglich!

lg
Flo
sarc
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.09.2006
Beiträge: 2657

BeitragVerfasst am: 17 Okt 2009 - 17:05:58    Titel:

Dafür zwei Schleifen einzusetzen ist nicht wirklich praktisch. Du willst ja eigentlich, dass die beiden Schleifen quasi parallel hochgezählt werden. Was du mit zwei Schleifen erzielst ist stattdessen, dass bei jedem Wert der ersten Schleife die zweite komplett durchläuft. Du würdest also erst überall die 1 hinschreiben, dann überall die 2 usw.

Also: Nur eine Schleife nehmen und den anderen Wert dann aus dem Index dieser Schleife errechnen. Beispielsweise könntest du die Zahl, die du schreiben willst, hochzählen, und aus dem jeweiligen Wert der Zahl die Position errechnen.

Um die Zahl in einen String zu verwandeln, könnte dir String.valueOf(a) helfen.
Underworld
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 18.03.2008
Beiträge: 60

BeitragVerfasst am: 17 Okt 2009 - 18:08:17    Titel:

Hi, vielen Dank für die Antwort

Zu den Umwandlung vom int zu String mit dem Befehl String.valueOf(a)
wie funktioniert der genau?

Ist dann die Variable nicht mehr als int definiert, sondern als String?
Was hat das dann für Auswirkungen?

lg Flo
sarc
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.09.2006
Beiträge: 2657

BeitragVerfasst am: 17 Okt 2009 - 18:11:34    Titel:

Ne, valueOf ist einfach nur eine Funktion, die als Rückgabewert einen String liefert. Du würdest also schreiben

String s = String.valueOf(a);

und hättest dann in der Variablen s den gewünschten String. a ist natürlich weiterhin ein int und kann auch so benutzt werden.
Underworld
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 18.03.2008
Beiträge: 60

BeitragVerfasst am: 17 Okt 2009 - 18:19:40    Titel:

ah vielen Dank.

Ich will nicht unfreundlich sein, aber könntest du mir vielleicht den Code abtippen (nur wenn, es dir nicht zu viel Zeit nimmt, natürlich!)

Ich weiß einfach nicht, wie ich das machen soll Embarassed

EDIT: Ich weiß zwar nicht wiesos funktioniert, aber so gehts:
for (int a=1; a<=20;a++)
{
g.drawString(String.valueOf(a),40*a,425);
}

ach, Java ist immer noch ein kleines Mysterium für mich, aber vielen Dank!
sarc
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.09.2006
Beiträge: 2657

BeitragVerfasst am: 17 Okt 2009 - 20:06:47    Titel:

Ja, das ist genau das, was ich gemeint hab. Smile Wenn dir dann irgendwann noch klar ist, warum das so funktioniert, ist das natürlich noch besser... Wink


Ich hätt dir das natürlich auch verraten können, aber sei ehrlich: Gelernt hast du so mehr, oder?
Underworld
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 18.03.2008
Beiträge: 60

BeitragVerfasst am: 18 Okt 2009 - 11:03:19    Titel:

Ja, das stimmt. Gelernt hab ich mehr!

Bin ich auch schon relativ weit, nur damit die Funktion geplottet wird, brauch ich noch ne gute Idee...

Bis jetzt ist mir nur eingefallen die Funktion so darzustellen:

for (int i=0;i<=1000;i++)
{
g.drawRect(500+i,500-i,0,0);
}
}

oder so:

for (int i = 0; i <= 1000; i += 1) {
g.drawLine(500 + 7i*i, 500 - i*i,500+7*(i+1), 500 -( (i+1)(i+1) ) );
}


Dummerweise, hab ich ja ein Koordinatensystem, wo 50 Pixel = 1 LE entsprechen.
Mit der drawRect methode kann ich lineare Funktionen ganz gut darstellen. Achsenabschnitte von 0.5 sind sogar möglich, da sie mit 50 multipliziert werden müssen und so wieder einen Integeren Wert ausliefern können. Steigungen von 0.5 sind aber ein großen Rätsel, halbe Pixel malen geht ja leider nicht!

Bei der drawLine Methode, habe ich es zwar geschafft, sogar eine quadratische Funktion darzustellen, jedoch funktioniert das auch nur bei quadratischen... Der Faktor 7 ist der (int)Math.sqrt(50) , das hängt ja mit dem Maßstab 1:50 zusammen...

Jedoch kann ich dann auch nur noch quadratische funktionen zeichnen, lineare funktionen oder höher gradige sind nicht möglich!
sarc
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.09.2006
Beiträge: 2657

BeitragVerfasst am: 18 Okt 2009 - 14:33:31    Titel:

Vorneweg: Ein richtig schöner Funktionsplotter ist nicht unbedingt die einfachste Aufgabe, die man sich als Anfänger aussuchen kann...

Das Problem ist, dass du niemals beliebig komplexe Funktionen in deine Zeichenfunktion geprügelt kriegst. Du müsstest dir also erst mal Gedanken darüber machen, wie du die Funktionen in deinem Code abbilden willst. Ich wage zu behaupten, dass das für deinen derzeitigen Kenntnisstand deutlich zu kompliziert wird.

Falls du dennoch mit deinen Funktionen herumexperimentieren willst: Wenn es nicht exakt passt, musst du eben ein bisschen bescheißen. Wenn der Wert laut Mathematik bei 4,7 Pixeln liegen sollte... Nun, meinst du, einer merkt es, wenn du das auf 5 verschiebst? Wink
Underworld
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 18.03.2008
Beiträge: 60

BeitragVerfasst am: 18 Okt 2009 - 20:15:50    Titel:

kk,

bin ich den mit einem von meinen beiden Varianten, denn auf dem richtigen Weg?

oder sollte ich das ganze nocheinmal von ganz von vorne überdenken?
sarc
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.09.2006
Beiträge: 2657

BeitragVerfasst am: 19 Okt 2009 - 14:51:50    Titel:

Ich halte es für keine gute Idee, die Funktion direkt in drawRect unterzubringen. Das wird viel zu unübersichtlich.

Ich würde dir da eher vorschlagen, in einer Schleife die x-Werte durchzugehen, an denen du einen Plotpunkt einzeichnen willst, und in der Schleife zu jedem dieser Werte den Funktionswert zu berechnen (und auf eine ganze Pixelanzahl zu runden). Damit hast du dann die zwei Koordinaten, die du (möglicherweise noch in irgendeiner Form skaliert) in das Diagramm reinmalen kannst.
Beiträge der letzten Zeit anzeigen:   
Foren-Übersicht -> Informatik-Forum -> Java Problem
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Chat :: Nachrichten:: Lexikon :: Bücher :: Impressum