Toon posts:

[JAVA]Tafelapplet

Pagina: 1
Acties:
  • 614 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Afbeeldingslocatie: http://www.its-learning.com/data/469/3/Turing%20hoofdstuk%203/TafelApplet.gif

Zoiets moet ik zien te laten werken, alleen m'n code voor de knop functioneert niet helemaal naar behoren.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    void Knop_ActionPerformed(java.awt.event.ActionEvent event)
    {
    String Tafel;
    Tafel = Tafelveld.getText();
    int Tafel2;
    Tafel2 = Integer.parseInt(Tafel);
    int Teller;
    Teller = 1; 
        
    while (Teller < 10)
    {
        int Inhoud;
        Inhoud = Teller * Tafel2;
        Uitvoerveld.setText(String.valueOf(Inhoud));
        Teller = Teller + 1;
    }


Dat is wat ik tot nu toe heb, de Teller doet raar, en ik weet niet hoe ik elke uitkomst onder elkaar moet krijgen.

B.v.d. Charlie Berendsen

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Wat is 'raar' :?
Je vervangt de tekst steeds met de laatste uitkomst, terwijl je het zou moeten toevoegen.
Tot slot, je zet alleen de uitkomst neer (54) ipv ook de berekening (2 X 27 = 54)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • 418O2
  • Registratie: November 2001
  • Laatst online: 23:41
Ik heb geen javakennis, maar mijn programmeerskills zeggen het volgende

Declareer Inhoud buiten de loop, dit is niet echt effecient. Zet dan gewoon elke loop inhoud even op 0. Daarnaast kan je als uitput gewoon geven

Uitvoerveld.setText('Teller x Tafel2 = '.String.valueOf(Inhoud));
en dan nog een linebreak er tussen
Pseudocode that is

[ Voor 8% gewijzigd door 418O2 op 04-12-2005 11:08 ]


  • icecoolsniper
  • Registratie: Juni 2002
  • Laatst online: 21-04 21:21

icecoolsniper

never run from a sniper!

je zou het probleem van de output kunnen oplossen door met printen bijv
Uitvoerveld.SetText((teller)+ " x " + (Tafel2) + " = " + (uitvoer));

ik vraag me ook af waarom je een string tafel inleest. Als de string opgevraagd wordt uit dat invoervakje kan dat toch ook als integer? Dan hoef je niet te parsen e.d

[ Voor 42% gewijzigd door icecoolsniper op 04-12-2005 11:17 ]

http://www.tweakers.net/gallery/58175/sys


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

418O2 schreef op zondag 04 december 2005 @ 11:07:
Uitvoerveld.setText('Teller x Tafel2 = '.String.valueOf(Inhoud));
en dan nog een linebreak er tussen
Pseudocode that is
Niet eens pseudocode :X

Het voorbeeld van icecoolsniper is beter, al snap ik z'n haakjesdrang niet.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • icecoolsniper
  • Registratie: Juni 2002
  • Laatst online: 21-04 21:21

icecoolsniper

never run from a sniper!

kenneth schreef op zondag 04 december 2005 @ 11:16:
[...]

Niet eens pseudocode :X

Het voorbeeld van icecoolsniper is beter, al snap ik z'n haakjesdrang niet.
haakjes zijn aangeleerd ;)

http://www.tweakers.net/gallery/58175/sys


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

418O2 schreef op zondag 04 december 2005 @ 11:07:
Declareer Inhoud buiten de loop, dit is niet echt effecient.
Voordeel is dat de variabele buiten de loop geen betekenis heeft en niet per ongeluk ergens anders voor gebruikt kan worden. Dan kan je ook niet vergeten hem voor een eventuele volgende loop te resetten (sowieso zorgt het ervoor dat je de variabele niet kan hergebruiken). Of het efficient is zou je moeten meten; de compiler zou het best weleens voor je kunnen optimaliseren.

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

Topicstarter
alvast bedankt voor jullie reacties!
Ik ben er pas mee begonnen, dus heb er nog niet veel evrstand van.
Ik heb het nu zo:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    String Tafel;
    Tafel = Tafelveld.getText();
    int Tafel2;
    Tafel2 = Integer.parseInt(Tafel);
    
    int Teller;
    Teller = 1;    
    
    int Inhoud;
    Inhoud = Teller * Tafel2;
        
    while (Teller < 10)
    {
        Uitvoerveld.setText((Teller)+ " x " + (Tafel2) + " = " + (Inhoud));
        Teller = Teller + 1;
    }


de teller wordt nu in de uitkomst steeds aangegeven als een 9. En de uitkomst is altijd het keer-getal :/

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

De berekening moet je wel in de loop laten :X

Waarom gebruik je btw geen for-lus? Niet dat het veel uitmaakt, maar het is m.i. wel netter:
Java:
1
2
3
4
    for (int Teller = 1; Teller <= 10; Teller = Teller + 1)
    {
        // code
    }

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Verwijderd schreef op zondag 04 december 2005 @ 11:34:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    String Tafel;
    Tafel = Tafelveld.getText();
    int Tafel2;
    Tafel2 = Integer.parseInt(Tafel);
    
    int Teller;
    Teller = 1;    
    
    int Inhoud;
    Inhoud = Teller * Tafel2;
        
    while (Teller < 10)
    {
        Uitvoerveld.setText((Teller)+ " x " + (Tafel2) + " = " + (Inhoud));
        Teller = Teller + 1;
    }


de teller wordt nu in de uitkomst steeds aangegeven als een 9. En de uitkomst is altijd het keer-getal :/
- Je overschrijft steeds de uitkomst. De laatste keer is die Teller 9 en daarom komt dat er te staan.
- Inhoud verandert niet in de while-loop.

Als je iets anders krijgt dan wat je verwacht, dan moet je proberen te achterhalen hoe deze vreemde uitvoer ontstaat. Als je niet weet wat er gebeurt, dan kan je het namelijk ook niet verbeteren.

Probeer anders eerst een console-applicatie te maken. Tafel kan je meegeven als argument.

Verwijderd

Topicstarter
volgens mij wordt er steeds een vergelijking gemaakt

code:
1
while (Teller < 10)


het verschil tussen 1 en 10, is 9, en die wordt volgens mij weergegeven :/

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Daos schreef op zondag 04 december 2005 @ 12:17:
Probeer anders eerst een console-applicatie te maken. Tafel kan je meegeven als argument.
De Turing methode is geel geweid aan het schrijven van Java-Applets.

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 00:20
Probeer eerst eens een string op te bouwen en geef die dan weer in het uitvoerveld.

Java:
1
2
3
4
5
6
7
String tekst = "";

for (int teller = 1; teller <= 10; teller++) {
    tekst += teller + " x " + tafel + " = " + (teller * tafel) + "\n";
}
        
uitvoerVeld.setText(tekst);
icecoolsniper schreef op zondag 04 december 2005 @ 11:15:
ik vraag me ook af waarom je een string tafel inleest. Als de string opgevraagd wordt uit dat invoervakje kan dat toch ook als integer? Dan hoef je niet te parsen e.d
getText() returnt een String en die moet geparsed worden als je een getal wilt hebben. Ik heb in de docs gekeken, maar ik kan geen andere method vinden dan deze om tekst op te vragen uit het JTextField.

[ Voor 69% gewijzigd door Jaap-Jan op 04-12-2005 13:08 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Verwijderd schreef op zondag 04 december 2005 @ 12:32:
volgens mij wordt er steeds een vergelijking gemaakt

code:
1
while (Teller < 10)


het verschil tussen 1 en 10, is 9, en die wordt volgens mij weergegeven :/
Nee.

"while (Teller < 10)" betekent: Zolang Teller kleiner is dan 10 doe het volgende...

Java:
1
2
3
4
5
6
7
8
    int Teller;
    Teller = 1;    
        
    while (Teller < 10)
    {
        // er wordt iets gedaan met Teller
        Teller = Teller + 1;
    }

In bovenstaande code begint Teller met 1. Daarna komt de loop.
Teller < 10 is waar dus er wordt iets gedaan met Teller (1) en daarna wordt Teller eentje hoger. Aan het einde van het rondje zit er 2 in Teller.
Teller < 10 is waar dus er wordt iets gedaan met Teller (2) en daarna wordt Teller eentje hoger. Aan het einde van het rondje zit er 3 in Teller.
...
Teller < 10 is waar dus er wordt iets gedaan met Teller (9) en daarna wordt Teller eentje hoger. Aan het einde van het rondje zit er 10 in Teller.
Teller < 10 is niet meer waar dus computer gaat verder met code na de loop.

Er zit 9 in Teller bij de laatste keer dat er iets met Teller gedaan wordt in de loop. Omdat je de uitvoer steeds overschrijft komt die 9 op je scherm.


Misschien moet je in je boek nog eens doorlezen hoe een while-loop werkt.

[ Voor 13% gewijzigd door Daos op 04-12-2005 17:56 . Reden: Wat offtopic zinnen weggehaald... ]


Verwijderd

Topicstarter
aha bedankt!
Nu nog uitzoeken hoe alles onder elkaar weergegeven kan worden.

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 00:20
Verwijderd schreef op zondag 04 december 2005 @ 16:36:
aha bedankt!
Nu nog uitzoeken hoe alles onder elkaar weergegeven kan worden.
Java:
1
+ "\n"
toevoegen aan de string zou genoeg moeten zijn. Die \n staat voor newline en zorgt ervoor dat er op de volgende regel verder wordt gegaan.

Hoe ziet je code er nu trouwens uit?

[ Voor 23% gewijzigd door Jaap-Jan op 04-12-2005 16:57 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:27

Creepy

Tactical Espionage Splatterer

Aan de late kant maar bij deze alsnog:

Let de volgende keer op P&W FAQ - De "quickstart". "Raar" zegt ons helemaal niets. Ook missen o.a. de zaken die je nu zelf al hebt geprobeerd en wat daar niet mee lukte, eventuele foutmeldingen, etc.) Zie ook P&W FAQ - Leer **** debuggen!!

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    String Tafel;
    Tafel = Tafelveld.getText();
    int Tafel2;
    Tafel2 = Integer.parseInt(Tafel);
    
    int Teller;
    Teller = 1;    
    
    int Inhoud;
    Inhoud = Teller * Tafel2;
        
    while (Teller <= 10)
    {
        Inhoud = Teller * Tafel2;
        Uitvoerveld.setText((Teller)+ " x " + (Tafel2) + " = " + (Inhoud));
        Teller = Teller + 1;         
               
    }


ik moet nog die return erin doen
code:
1
+"/n"
.
Als ik 'm bij
code:
1
Teller = Teller + 1;
doe, dan geeft hij de foutmelding dat het niet van een String naar een int kan.

  • Daos
  • Registratie: Oktober 2004
  • Niet online
:'(
Japie_17 schreef op zondag 04 december 2005 @ 13:02:
Probeer eerst eens een string op te bouwen en geef die dan weer in het uitvoerveld.

Java:
1
2
3
4
5
6
7
String tekst = "";

for (int teller = 1; teller <= 10; teller++) {
    tekst += teller + " x " + tafel + " = " + (teller * tafel) + "\n";
}
        
uitvoerVeld.setText(tekst);
Java:
1
2
3
for (int teller = 1; teller <= 10; teller++) {
    // body
}

is ongeveer hetzelfde als
Java:
1
2
3
4
5
int teller = 1;
while (teller <= 10) {
    // body
    teller++;
}

is hetzelfde als
Java:
1
2
3
4
5
6
int teller;
teller = 1;
while (teller <= 10) {
    // body
    teller = teller + 1;
}

[ Voor 31% gewijzigd door Daos op 04-12-2005 18:11 . Reden: zie bericht hieronder ]


Verwijderd

@daos
Is niet hetzelfde, kijk maar eens naar de scope van "teller"...

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 00:20
Verwijderd schreef op zondag 04 december 2005 @ 17:51:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    String Tafel;
    Tafel = Tafelveld.getText();
    int Tafel2;
    Tafel2 = Integer.parseInt(Tafel);
    
    int Teller;
    Teller = 1;    
    
    int Inhoud;
    Inhoud = Teller * Tafel2;
        
    while (Teller <= 10)
    {
        Inhoud = Teller * Tafel2;
        Uitvoerveld.setText((Teller)+ " x " + (Tafel2) + " = " + (Inhoud));
        Teller = Teller + 1;         
               
    }


ik moet nog die return erin doen
code:
1
+"/n"
.
Als ik 'm bij
code:
1
Teller = Teller + 1;
doe, dan geeft hij de foutmelding dat het niet van een String naar een int kan.
Hij moet daar:
Java:
1
Uitvoerveld.setText((Teller)+ " x " + (Tafel2) + " = " + (Inhoud) + "\n"); 


En het statement
Java:
1
    Inhoud = Teller * Tafel2;
(die buiten en boven de while- loop staat) heeft geen zin, want er wordt niets mee gedaan :).

Verder heb je nog niet door wat setText() doet. setText() stelt de tekst in van een tekstveld en is precies het tegenovergestelde van getText(), die tekst leest. Dus iedere keer als je setText() doet, wordt je oude tekst vervangen voor de nieuwe tekst, dus je oude tekst ben je kwijt.

Als je dat statement dan goed wilt doen, dus iedere keer een regel toevoegen, moet je eigenlijk dit doen:
Java:
1
Uitvoerveld.setText(Uitvoerveld.getText() + (Teller)+ " x " + (Tafel2) + " = " + (Inhoud) + "\n");


Dit zou gaan werken, maar is verschrikkelijk inefficiënt, omdat je iedere keer tekst ophaalt uit je tekstvak en weer instelt. Je kunt dan beter zorgen dat je in één keer je te printen tekst voor elkaar hebt, zodat je die maar één keer hoeft in te stellen.

Zoiets als dit dus:
Java:
1
2
3
4
5
6
7
8
String tekst = "";

while (Teller < 10)
{
    tekst = tekst + Teller + " x " + Tafel2 + " = " + Inhoud + "\n";
    Teller = Teller + 1;
}
Uitvoerveld.setText(tekst)
Wat is daar mis mee? Ik heb geleerd dat je het beste een for- loop kunt gebruiken als je weet hoe vaak een bepaalde iteratie gedaan moet worden, zoals ook in dit geval. Je weet dat je teller moet lopen van 1 t/m 10, waarom zou je dan een while met een teller = teller + 1 gebruiken? Bovendien heb je die teller toch niet nodig buiten de loop en die variabele ben je kwijt zodra je for- loop is afgelopen.

[ Voor 31% gewijzigd door Jaap-Jan op 04-12-2005 18:20 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Verwijderd

Topicstarter
_/-\o_ Hij doet het, heel erg bedankt!! Heb er veel van geleerd!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Niets. Ik ga :'( van Cafi.

Ik heb je bericht herhaald om te laten zien dat daar al de oplossing in staat. Misschien weet Cafi niet wat een for-loop is en daarom probeerde ik uit te leggen dat een for-loop (ongeveer) hetzelfde doet als de while loop waar Cafi mee bezig is.

[edit]
Het is trouwens "while (Teller <= 10)".

[ Voor 10% gewijzigd door Daos op 04-12-2005 19:00 ]


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 00:20
Daos schreef op zondag 04 december 2005 @ 18:57:
[...]

Niets. Ik ga :'( van Cafi.

Ik heb je bericht herhaald om te laten zien dat daar al de oplossing in staat. Misschien weet Cafi niet wat een for-loop is en daarom probeerde ik uit te leggen dat een for-loop (ongeveer) hetzelfde doet als de while loop waar Cafi mee bezig is.
Sorry, dan had ik je niet goed begrepen :).

@cafi:
Je kunt nog een stap verdergaan. Weet je wat er gebeurt als je in plaats van een getal in je tekstveld een woord ofzo typt? Integer.parseInt() zal over de zeik gaan en een Exception geven, want hij kan er geen chocola van maken.

Die dingen kun je netjes afvangen in een zogenaamd try- catchblok. Lees dit maar eens door: Handling Errors with Exceptions, dan kun je leren hoe je je user input netjes afhandeld. Om op te zoeken welke exception een bepaalde method kan 'throwen', kun je kijken in de documentatie van de Java API, bijvoorbeeld die van Integer.

In je catch kun je dan bijvoorbeeld zetten dat in je Uitvoerveld geprint wordt dat Tafelveld geen getal bevat.

[ Voor 53% gewijzigd door Jaap-Jan op 04-12-2005 20:09 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett

Pagina: 1