[Java] de %-operator

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

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben nu het boek Douglas Bell & Mike Parr "Java voor studenten" aan het doorwerken en ik ben op een opdracht gestuit waarmee ik niet verder kom.. de opdracht luid als volgt:
Maak een applicatie voor een consumptie automaat die berekend hoe hij het wissel geld zo groot mogelijk terug kan geven, we maken gebruik van de volgende gegevens:

amountGiven = 100
itemCost = 55
de munt eenheden voor de teruggave zijn 50, 20, 10 en 5 eurocent.

Maak gebruik van de %-operator.
En dit is wat ik er tot nu toe van gemaakt heb:
code:
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
// Automaat.java
//
import java.awt.*;
import java.applet.Applet;

public class Automaat extends Applet {
    public void paint(Graphics g) {
        int amountGiven = 100;
        int itemCost = 55;
        int ec100, ec50, ec20, ec10, ec5, ec2, ec1;
        int returnAmount;
        
        returnAmount = amountGiven - itemCost;
        
        ec100 = returnAmount / 100;
        ec50 = returnAmount / ec100;
        ec20 = returnAmount / ec50;
        ec10 = returnAmount / ec20;
        ec5 = returnAmount / ec10;
        
        g.drawString("U krijgt " + ec100 + " Euro's terug", 30, 30);
        g.drawString("U krijgt " + ec50 + " muntjes van 50 eurocent terug", 30, 45);
        g.drawString("U krijgt " + ec20 + " muntjes van 20 eurocent terug", 30, 60);
        g.drawString("U krijgt " + ec10 + " muntjes van 10 eurocent terug", 30, 75);
        g.drawString("U krijgt " + ec5 + " muntjes van 5 eurocent terug", 30, 90);
    }
}


Maar dit werkt niet omdat je bij 'ec50 = returnAmount % ec100' een 0 waarde hebt, daarbij komt nog eens dat ik op deze manier de %-operator niet gebruik maar ik zou niet weten hoe die hier in toepassing zou kunnen worden gebracht.

Kan iemand mij een paar tips geven (hoef geen voorgekauwde code!!).

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou als ik jou was ff wat info opzoeken over de % operator (ook wel modulo genoemd) zoeken:

De % operator geeft de rest waarde terug. Bijvoorbeeld:

11 % 2 = 1

want:

11 / 2 = 10 (dan houdt je er dus 1 over en dat is de rest waarde)
11 - 10 = 1 = 11 % 2 (restwaarde)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik weet wat de %-op doet.. maar ik begrijp niet hoe ik hem in een loopje schrijf zodat ie de berekening uitvoert die voor de opdracht vereist is.. eerlijk gezegd lukt het me dat zonder de %-op al niet, zoals je kan zien in het ontwerp hierboven blijf ik bij die 0-deling hangen..

Acties:
  • 0 Henk 'm!

Verwijderd

Hmmmm erg intressant :?



modbreak: Lees de volgende keer een ander topic en laat dit soort nutteloze opmerkingen achterwege, alsjeblieft. :|

[ Voor 78% gewijzigd door drm op 16-02-2004 18:34 ]


Acties:
  • 0 Henk 'm!

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

Robtimus

me Robtimus no like you

Verwijderd schreef op 16 februari 2004 @ 18:26:
Ik zou als ik jou was ff wat info opzoeken over de % operator (ook wel modulo genoemd) zoeken:

De % operator geeft de rest waarde terug. Bijvoorbeeld:

11 % 2 = 1

want:

11 / 2 = 10 (dan houdt je er dus 1 over en dat is de rest waarde)
11 - 10 = 1 = 11 % 2 (restwaarde)
Doe liever 11 / 2 = 5
11 - (2 * 5) = 1 = 11 % 2

Een oplossing:
code:
1
2
ec100 = returnAmount / 100;
ec50 = (returnAmount % 100) / 50;
etc

[ Voor 11% gewijzigd door Robtimus op 16-02-2004 18:32 ]

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


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Probeer eerst gewoon eens een algoritme in woorden neer te zetten. Gewoon stap voor stap opschrijven wat je doet waneer je een bepaald bedrag aan wisselgeld terug moet geven. Zodra je dit volledig opgeschreven hebt zie je vanzelf waar je de % nodig hebt. (Daarnaast heb je nergens een loopje in je code ;) )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • TrickShot
  • Registratie: Februari 2003
  • Laatst online: 14-12-2023

TrickShot

Veel shots... weinig tricks.

Je moet de berekeningen in een lus plaatsen omdat je meer dan 1x hetzelfde muntstuk kan teruggeven.
Het lijkt me het gemakkelijkste om gebruik te maken van een array,
en dan je lus doorlopen en testen op 'amount % intStuk[i] == 0'
zo ja =>' i++'
Ik hoop dat ik niet teveel verraden heb(en dat je al gehoord hebt van arrays) ;)

Athlon 2500+ @ 2230 MHz, 512 MB 3200 kingston, 2 x sata maxtor 120 GB, 1 WD 80 GB, Ti4200, Antec Sonata


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Naja geloof dat ik al een ideetje krijg.. mooi kan ik naar hfst 5 zo..

arrays komen in hfst 6 geloof ik ;) kom er wel.. :)

[ Voor 29% gewijzigd door Verwijderd op 16-02-2004 18:35 ]


Acties:
  • 0 Henk 'm!

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 14:15

BrZ

lol, deze opdracht heb ik een tijd geleden ook moeten maken ;)

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
import java.awt.*;
import java.applet.Applet;

public class automaat extends Applet {
    public void paint (Graphics g) {
        int amountGiven = 165;
        int itemCost = 55;
        
        int wisselGeld = amountGiven - itemCost;
        
        int euro100 =  wisselGeld / 100;
        int restWissel = wisselGeld % 100;

        int euro50 = restWissel / 50;
        restWissel = restWissel % 50;
        
        int euro20 = restWissel / 20;
        restWissel = restWissel % 20;

        int euro10 = restWissel / 10;
        restWissel = restWissel % 10;
    
        int euro5 = restWissel / 5;
        restWissel = restWissel % 5;
        
        int euro2 = restWissel / 2;
        restWissel = restWissel % 2;
        
        
        g.drawString ("inworp: " + amountGiven, 10, 10);
        g.drawString ("prijs: " + itemCost, 10, 30);
        g.drawString ("1 euro: " + euro100 + "x", 10, 60);
        g.drawString ("50 eurocent: " + euro50 + "x", 10, 80);
        g.drawString ("20 eurocent: " + euro20 + "x", 10, 100);
        g.drawString ("10 eurocent: " + euro10 + "x", 10, 120);
        g.drawString ("5 eurocent: " + euro5 + "x", 10, 140);
        g.drawString ("2 eurocent: " + euro2 + "x", 10, 160);
        g.drawString ("1 eurocent: " + restWissel+ "x", 10, 180);
    }
}


En ja, als ik het nu weer zou moeten maken zou ik het wel ietsje anders doen :+

Acties:
  • 0 Henk 'm!

  • Agent-X
  • Registratie: Januari 2000
  • Niet online
eventeel als functie methode de boel teruggeven naar omzet methode?

int geefAantal(double waarde, double vorm) {
resultaat = waarde - (waarde%vorm) / vorm;
return (int)resultaat;
}

zoiets bedoelde ik

[ Voor 37% gewijzigd door Agent-X op 16-02-2004 18:49 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de voorgekauwde code he ;) maar was er al achter.. Hfst 5 here I come! :P
Pagina: 1