Warum schwingt die Linie nicht?

Status
Nicht offen für weitere Antworten.

rumkugeln

Mitglied
Ich habe ein Programm geschrieben, das folgenden Quelltext enthält:
Java:
class Zeichnerklasse extends Canvas implements Runnable
{

    int wartezeit;
    int bildschirmhöhe;
    int bildschirmbreite;
    int x ;
    int x2 ;
    int y;
    int y2;





    public Zeichnerklasse ()
    {
        bildschirmhöhe = getHeight ();
        bildschirmbreite = getWidth ();
        x = bildschirmbreite/2;
        y = bildschirmhöhe-60;
        x2 = bildschirmbreite/2;
        y2 = y-200;

    }




    public void paint (Graphics g)
    {
       g.setGrayScale (255);
       g.fillRect (0,0, bildschirmbreite, bildschirmhöhe);
       g.setColor(0, 0, 0);
       g.fillArc ( (bildschirmbreite-40)/2,bildschirmhöhe-80 ,40,40,0,360);
       g.setColor (255,0,0);
       g.drawLine (x, y, x2, y2 );

       
        
    }

    public void start()
    {
        Thread thread = new Thread (this);
        thread.start ();
    }


    public void run ()
    {
        while (true)
        {
            
            

            for (int i=0;i<60;i++)
            {
                x2 =(int) (Math.cos ((i/180*Math.PI)*(bildschirmbreite-60)+30));
                y2 = (int) (Math.sin (i/180*Math.PI)*((bildschirmhöhe-60)/2)+140);
                repaint();
                serviceRepaints();
               

                try
                {
                    Thread.sleep (wartezeit*60);
                }
                catch (InterruptedException o)
                {

                }


                if (x2 == bildschirmbreite)
                    break;

            }

            for (int j=60; j>0; j--)
            {
                x2 =(int) ((Math.cos (j/180*Math.PI)*(bildschirmbreite-60)+30));
                y2 = (int) ((bildschirmhöhe-60)* Math.sin (j/180*Math.PI) +140);
                repaint();
                serviceRepaints();
               
                 try
                {
                  Thread.sleep (wartezeit*60);
                }
                catch (InterruptedException o)
                {

                }

                if (x2 == 0)
                    break;
            }
        }

    }
    public void stop()
    {
        
    }


}

Die Linie die in der paint() Funktion gezeichnet wird soll hin und her schwingen. Im Moment bewegt sie sich schon hin un her, aber ruckartig, das heißt sie springt von einem Endpunkt bis zum anderen. Woran kann das liegen?
 
Kardinalfehler: (fast) 1000 Zeilen Code bauen ohne das irgendwas funktioniert und sich am Ende über alles wundern,

fange ganz langsam an, z.B. komplett ohne GUI nur mit Textausgabe,
dann nehmen wir uns als nächstes mal 3 der 108 Zeilen:
> for (int i=0;i<60;i++)
> {
> x2 =(int) (Math.cos ((i/180*Math.PI)*(bildschirmbreite-60)+30));

du vermutest bestimmt irgendwas sinnvolles dahinter,
getestet kannst du es aber kaum haben:
Java:
public class Test {

	public static void main(String[] args) throws Exception {
		int bildschirmbreite = 100;
		int x2;
		for (int i = 0; i < 60; i++) {
			x2 = (int) (Math.cos((i / 180 * Math.PI) * (bildschirmbreite - 60)+ 30));
			System.out.print(x2 + ", ");
		}
	}
}
Ausgabe:
Code:
0, 0, 0, 0, 0, 0, 0, 0, 0, [...] 0, 0, 0, 0, 0, 0, 0, 0, 0,
wohl nicht was du erwartest hast oder?

selbst das zu analysieren ist noch viel zu groß,
kleiner kleiner kleiner, mit den Grundlagen anfangen!
Java:
public class Test {

	public static void main(String[] args) throws Exception {
		int x2;
		for (int i = 0; i < 10; i++) {
			x2 = i / 180 * 300;
			System.out.print(x2 + ", ");
		}
	}
}
Ausgabe
Code:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

immer noch nicht ideal, aber zumindest ein überschaubares Problem,
in Java wird nämlich int/ int ganzzahlig gerechnet, i / 180 wird immer 0 sein, solange i < 180 ist,

mit
Java:
public class Test {

	public static void main(String[] args) throws Exception {
		int x2;
		for (int i = 0; i < 10; i++) {
			x2 = (int) (i / 180.0 * 300);
			System.out.print(x2 + ", ");
		}
	}
}
käme dagegen
Code:
0, 1, 3, 5, 6, 8, 10, 11, 13, 15,
raus,
int/double wird zu double gerechnet


dein ganzes Programm musst du also auf int/int usw. kontrollieren,
viel wichtiger als ein einzelner Fehler wäre aber, überhaupt zu wissen, was im Programm passiert
-> kleine Testprogramme + Logausgaben während der Ausführung oder Debugging
 
Vielen Dank das du dir so große Mühe gemacht hast!! Das ist ja irgendwie leicht erschreckend mit der ersten Ausgabe! Da wird wohl noch eine Menge Arbeit auf mich zukommen 🙁
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben