[JAVA] Eclipse error

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo mensen,

Ik volg net een paar weken een cursus Imperatief programmeren, waarin ik JAVA leer programmeren.
Ik moet eerlijk zeggen, het valt me vies tegen.

(opgelost)Ik zit nu met een heel vervelend probleem:

Ik gebruik het programma Eclips om JAVA programma's te schrijven. Ik heb er net één uitgewerkt maar als ik het programma wil 'runnen' verschijnt deze melding in beeld:

"Editor does not contain an applet"

Terwijl ik toch de volgende Klasse heb gemaakt:
(opgelost)

Nieuw probleem:
Deze applet tekent een zwart vlak op het scherm terwijl ik wil dat de applet een mandelbrot figuur tekent.

Vermoeden:
Ik denk dat er ergens in mijn 'mandelbrot' methode of mijn paint herdefinitie iets niet klopt.

Geprobeerd:
Debug. geen effect. Waarschijnlijk omdat het geen fout in de taal is, maar omdat ik het zo gepogrammeerd heb dat het programma iets anders doet.

Foutmeldingen:
Geen. (wel waarschuwelingen van niet gekoppelde elementen, maar daar ben ik me van bewust)


Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class Mandelbrot extends Applet
                        implements ActionListener, MouseListener
{
    TextField positiex, positiey, schaal, herh;
    int mandel, h;
    double x, y, px, py, s;
    
     
    
    
    public void init () 
    {
        String pm_positiex, pm_positiey, pm_schaal, pm_herh;
                
        pm_positiex=this.getParameter("positiex");
        pm_positiey=this.getParameter("positiey");
        pm_schaal=this.getParameter("schaal");
        pm_herh=this.getParameter("herh");
        
        positiex = new TextField("0.0",20);
        positiey = new TextField("0.0",20);
        schaal = new TextField("0.01",20);
        herh = new TextField("100",10);
        
        this.add(positiex);
        this.add(positiey);
        this.add(schaal);
        this.add(herh);
        
        positiex.addActionListener(this);
        positiey.addActionListener(this);
        schaal.addActionListener(this);
        herh.addActionListener(this);
        
        this.addMouseListener(this);
    }
    
    public int mandelbrot (double x, double y)
    {   
        double a, b, a1;
        
        a=0; b=0; a1=0;
                
        for (mandel=0; mandel<h; mandel++)
        {
            a1 = a;
            a = a*a-b*b + x;
            b = 2*a1*b + y;
                    
            
        }
        return(mandel);
    }


    public void actionPerformed(ActionEvent e)
    {
        px = Double.parseDouble( positiex.getText() );
        py = Double.parseDouble( positiey.getText() );
        s = Double.parseDouble( schaal.getText() );
        h = Integer.parseInt( herh.getText() );
        
        
        this.repaint();
    }
    
    public void mouseClicked (MouseEvent e)
    {
        px=(e.getX()-200)*s+px;
        py=(e.getY()-200)*s+py;
        
        if (e.getButton()==e.BUTTON1)
        {
            s=s/2;
        }
        
        positiex.setText(""+px);
        positiey.setText(""+py);
        schaal.setText(""+s);
        
        this.repaint();
    }

    public void paint(Graphics g) 
    {
        int x, y, m;
                
        for(x=-200; x<=200; x++) 
        {
            for (y=-200; y<=200; y++) 
            {
                m=mandelbrot(x*s+px, y*s+py);
                
                if (m==h) 
                {
                    g.setColor(Color.black);
                } 
                else 
                {
                    g.setColor(new Color(100+m%50*3, 10+m%60*3, 5+m%25*10));
                }
                
                g.fillRect(x+200, y+200, 1, 1);
            }
        }
    }
    
    public void mouseExited(MouseEvent e) {
    }
    
    public void mouseEntered(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
    }

}


(als jullie nog andere domme fouten vinden in mijn programma dan hoor ik het natuurlijk ook heel graag!)

[ Voor 69% gewijzigd door Verwijderd op 02-10-2008 17:34 . Reden: Code=JAVA toegevoegd ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Gebruik eerst eens [code]-tags ipv zo'n table. danku.

Mis je misschien een main?

[ Voor 33% gewijzigd door CodeCaster op 02-10-2008 17:10 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CodeCaster schreef op donderdag 02 oktober 2008 @ 17:06:
Gebruik eerst eens [code]-tags ipv zo'n table.
Sorry, wist niet hoe. Heb het aangepast.

De error heb ik trouwens opgelost, maar mijn Mandelbrot applet geeft alleen een zwart vlak...
Ben nog een enorme N00B hierin, en heb helaas niemand in mijn omgeving of kennisenkring die hier verstand van heeft..

Acties:
  • 0 Henk 'm!

  • EnderQ
  • Registratie: Januari 2005
  • Laatst online: 20-09 16:07
Je hebt geen main(){ } maak je er een applet van? of execute je hem vanuit de ide, in dit laatste geval main routine nodig.

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Verwijderd schreef op donderdag 02 oktober 2008 @ 17:03:
"Editor does not contain an applet"
De actieve venster die je op het moment voor de neus hebt en dus wilt uitvoeren is geen applet :)

Acties:
  • 0 Henk 'm!

  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 26-08 19:26
CodeCaster schreef op donderdag 02 oktober 2008 @ 17:06:
Gebruik eerst eens [code]-tags ipv zo'n table. danku.

Mis je misschien een main?
main() is allen bij een applicatie ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
BalusC schreef op donderdag 02 oktober 2008 @ 17:14:
[...]

De actieve venster die je op het moment voor de neus hebt en dus wilt uitvoeren is geen applet :)
Klopt helemaal, dom dom dom!

Allemaal hartstikke bedankt al voor de reacties! heb nog een vraagje:

Weet misschien iemand waarom ik bij uitvoeren van deze applet geen mandelbrot-figuur maar een vaag zwart vlak krijg?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 02 oktober 2008 @ 17:03:
(als jullie nog andere domme fouten vinden in mijn programma dan hoor ik het natuurlijk ook heel graag!)
Verwijderd schreef op donderdag 02 oktober 2008 @ 17:18:
Weet misschien iemand waarom ik bij uitvoeren van deze applet geen mandelbrot-figuur maar een vaag zwart vlak krijg?
Heb je al gedebugged? (Debuggen: Hoe doe ik dat?) Je post hier een aardige lap code, maar het is hier in de Devschuur niet de bedoeling dat wij daar naar gaan staren om een eventuele fout te zien. My guess is dat je ergens een repaint mist ofzo, maar ik ben niet zo into Java :P En actionPerformed wordt nergens gebruikt :?

Desalniettemin van harte welkom op GoT overigens ;) Misschien even wat leesvoer om je snel te settelen hier:
Programming Beleid Quickstart
Algemeen beleid

[ Voor 35% gewijzigd door RobIII op 02-10-2008 17:29 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op donderdag 02 oktober 2008 @ 17:25:


Desalniettemin van harte welkom op GoT overigens ;) Misschien even wat leesvoer om je snel te settelen hier:
Programming Beleid Quickstart
Algemeen beleid
Thanks, heb gelijk even mijn topic wat aangepast :)

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Verwijderd schreef op donderdag 02 oktober 2008 @ 17:03:
Geprobeerd:
Debug. geen effect. Waarschijnlijk omdat het geen fout in de taal is, maar omdat ik het zo gepogrammeerd heb dat het programma iets anders doet.
Nee, zo werkt het debuggen niet helemaal. Loop eens de code in jouw hoofd door. Wat doet het precies en waarom. Voeg enkele System.out.println() statements op strategische locaties dat de huidige waarde van de gewenste variabelen uitvoert. Zie ook het gegeven linkje.

Gegeven feit is dat het een zwart vlak geeft. De punt waarop je kleur instelt is dat gedeelte beginnend met if (m==h) in de paint methode. Kennelijk is m altijd gelijk aan h, waardoor elk punt zwart wordt. Ga nu een stapje verder en vind uit waarom deze altijd gelijk is. Enzovoorts :)

[ Voor 13% gewijzigd door BalusC op 02-10-2008 17:45 ]


Acties:
  • 0 Henk 'm!

  • tiescarbo
  • Registratie: December 2004
  • Laatst online: 17-04-2024
/offtopic

In welke stad studeer je ;)?

Ik moet toevallig morgen ook een mandelbrot opdracht inleveren in Utrecht.

/ontopic

Ik zal zo even naar je code kijken!

Edit: Ik had eerst een vergelijkbaar probleem. Het ging toen mis in mijn mandel-methode.
Ik denk dat je daar even goed naar zal moeten kijken.

[ Voor 30% gewijzigd door tiescarbo op 02-10-2008 17:52 ]


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

De fout zit inderdaad in de mandel methode. Daarin wordt de waarde van m in een loopje toegenomen tot de waarde van h, waarna de m wordt geretourneerd. Als je die daarna vergelijkt met h, dan zal dat altijd true geven ;)

Acties:
  • 0 Henk 'm!

  • kw4h
  • Registratie: Februari 2008
  • Laatst online: 12-09 08:59
Verwijderd schreef op donderdag 02 oktober 2008 @ 17:18:
[..]
Weet misschien iemand waarom ik bij uitvoeren van deze applet geen mandelbrot-figuur maar een vaag zwart vlak krijg?
Heb net snel je code gedraaid, waarin ik een extra regel code heb neergezet:
Java:
1
2
3
4
5
6
7
8
// vorige regels
System.out.println(m == h); // DEZE IS VAN MIJ :)

if (m==h)
{
    g.setColor(Color.black);
}
// volgende regels


Ik kreeg alleen maar 'true' terug. Wat betekent dat m altijd gelijk is aan h.
Sterker nog. 'm' en 'h' zijn altijd 0.

Als ik daarna op Enter druk in het vlak met waarde 100 (die dus 'h' moet setten) - worden beiden 'm' en 'h' ook 100.

Dat komt dan weer doordat uit je functie 'mandelbrot(double x, double y)' altijd hetzelfde komt als de waarde van 'h'.

Kijk naar deze functie:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public int mandelbrot (double x, double y)
{
    double a, b, a1;
    a=0; b=0; a1=0;

    for (mandel=0; mandel<h; mandel++)
    {
        a1 = a;
        a = a*a-b*b + x;
        b = 2*a1*b + y;
    }
    return(mandel);
}


in die functie wordt 'mandel' geretourneerd. En mandel wordt altijd de waarde van h. Dit omdat in je for-loop (van 0 tot h), mandel altijd 1 wordt opgeteld. Totdat ie bij h is aangekomen. En dan issie dus gelijk aan h (volg je me nog? :P)

In ieder geval genoeg punten om achterna te gaan! :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wow, ik zie het! Wat super dat jullie daar achter kwamen, bedankt! :D

Nu ga ik eens heel diep nadenken hoe ik dit ga oplossen...

Edit: heb de code veranderd in het volgende:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 public int mandelbrot (double x, double y)
    {   
        double a, b, a1;
        
        a=0; b=0; a1=0;
        mandel=0;
        
        while (Math.sqrt(a*a + b*b)<=2 && mandel<h)
        {
            a1 = a;
            a = a*a-b*b + x;
            b = 2*a1*b + y;
            mandel++;        
            
        }
        return(mandel);
    }

    public void paint(Graphics g) 
    {
        int x, y, m;
                
        for(x=-200; x<=200; x++) 
        {
            for (y=-200; y<=200; y++) 
            {
                m=mandel;
                
                if (m%2==0) 
                {
                    g.setColor(Color.red);
                } 
                
                else
                { 
                    g.setColor(Color.yellow);
                }
                
                g.fillRect(x+200, y+200, 1, 1);
            }
        }
    }


Wat heb ik dus veranderd: de voorwaarde voor 'while' in mandelbrot en in de paint methode heb ik in plaats van if m<=h heb ik m%2==0. Nu krijg ik nog steeds een effen vlak. (sorry dat ik zo zeur, maar zoals ik al zei ben ik beginner, en die system/out dingen ken ik verder dus ook nog niet)

[ Voor 80% gewijzigd door Verwijderd op 02-10-2008 20:54 ]


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:10

Robtimus

me Robtimus no like you

Begin in je paint eens met de volgende regel:
Java:
1
2
3
4
5
public void paint(Graphics g)
{
    super.paint(g);
    // de rest
}

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
IceManX schreef op donderdag 02 oktober 2008 @ 20:54:
Begin in je paint eens met de volgende regel:
Java:
1
2
3
4
5
public void paint(Graphics g)
{
    super.paint(g);
    // de rest
}
Ik zie hierbij geen effect, wat had er moeten gebeuren?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 02 oktober 2008 @ 18:41:
Wow, ik zie het! Wat super dat jullie daar achter kwamen, bedankt! :D
Kwestie van debuggen; dat is iets wat je net zo snel, zo niet eerder, onder de knie moet zien te krijgen als programmeren. Zonder debuggen kom je nergens.
Verwijderd schreef op donderdag 02 oktober 2008 @ 20:55:

Ik zie hierbij geen effect, wat had er moeten gebeuren?
Met alle respect, maar het is niet de bedoeling dat we je handje vasthouden hier. De oplossing is hier al eens gegeven en daarna nog meermalen. Als je niets ziet verschijnen gaat er dus nog iets niet goed; heb je al eens met een debugger door je code gestapt? En, ik weet dan geen drol van Java, ik ken mijn grondbeginselen van OO wel en wat een super.paint doet kan ik (zonder verdere kennis) zo ook wel voorspellen. super is de parent-klasse lijkt me en super.paint() zal dus de paint van de parent eerst uitvoeren.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Gewoon om netjes de API te volgen for the case that :)
If this method is reimplemented, super.paint(g) should be called so that lightweight components are properly rendered.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn programma werkt, hoera!

Daarvoor heb ik eerst mijn Mandelbrot methode omgebouwd (aangezien daar niet een mandel waarde uit kwam!)

Fragment:

Java:
1
2
3
4
5
6
7
8
9
10
11
 while (afstand<=4 && mandel<h)
        {
            double a1 = (a*a)-(b*b);
            double b1 = (2*a*b);
            
            a = a1 + x;
            b = b1 + y;
            
            afstand = (a*a + b*b);
            
            mandel++;

Daarnaast heb ik aan de paint methode een extra regel toegevoegd, aangezien hij de mandelwaarde niet opnieuw uitrekende, maar de hele tijd dezelfde nam (vandaar het egale vlak)

Fragment:

Java:
1
2
3
4
5
    for(x=-200; x<=200; x++) 
        {
            for (y=-200; y<=200; y++) 
            { 
                int mandel = mandelbrot((x*s+px),(y*s+py)); 


Uiteraard heb ik hier en daar nog wat andere dingen veranderd, maar deze waren essentieel voor het oplossen van het probleem.

_/-\o_ Iedereen heel erg bedankt voor het advies en de expertise! _/-\o_

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Tip: begin eerder aan je opdracht en zorg er voor dat je niet met dit soort vragen zit op de dag van de deadline. Ik heb een zéér sterk vermoeden dat je eerstejaars informatica doet aan de UU en daar is de deadline van de Mandelbrot-opdracht vandaag om 23:59.

Er is tweemaal per week werkcollege, daar hadden ze je prima kunnen helpen met deze vragen :).

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
*iets teveel informatie*

[ Voor 94% gewijzigd door Creepy op 04-10-2008 09:16 ]


Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 10:08

Spockz

Live and Let Live

HuHu: Die informatie staat niet voor niets achter een login.

LauraVerstoep:
Mag ik vragen waarom je waarden (200 voor de max van x en y) hardcoded hebt in je code? Zo is je applicatie niet echt flexibel.

Bovendien zit je 1px te veel naar rechts te tekenen. Als je de vergelijkingen in je for loop veranderd naar < dan teken je niet te veel.

[ Voor 31% gewijzigd door Spockz op 03-10-2008 23:12 . Reden: Aanvullingen. ]

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8

Pagina: 1