Nieuw bij java

Status
Niet open voor verdere reacties.

icemannoodle

Gebruiker
Lid geworden
8 sep 2008
Berichten
14
hallo, ik had een vraag.

Ben sinds kort begonnen met Java programmeren en ben dus echt nog bezig met de basics.
De bedoeling is dat ik een programma schrijf met de volgende omschrijving:

1 blik cola kost 1 euro 25. Schrijf een programma waarin iemand in eurocenten kan opgeven hoeveel hij inwerpt.
Als dit te weinig is komt er een mededeling. Als het wel genoeg is moet het programma berekenen hoeveel munten van 2 euro, 1 euro, 50 cent, 20 cent, 10 cent en 5 centen hij terug moet geven. Gebruik hiervoor moet met een %-operator en een /-operator.
Nu ben ik zover al gekomen:

import javax.swing.*;

public class Cola {
public static void main(String[] arg) {
String input;
String output;
int Teruggave = 0;

input = JOptionPane.showInputDialog("Aantal invoeren");
int Aantal = Integer.parseInt(input);

input= JOptionPane.showInputDialog("Inworp in centen");
int Inworp = Integer.parseInt(input);

int Totaalprijs = Aantal * 125;

if (Inworp > 125) {
Teruggave = Inworp - Totaalprijs;

Nu moet ik dus de verschillende munteenheden gaan verwerken.

Ik hoop dat jullie me een eindje op weg kunnen helpen hiermee
 
Door de teruggave te delen door de muntwaarde krijg je het aantal munten dat hij moet teruggeven. Door de teruggave modulo (%) de muntwaarde te nemen krijg je de rest van de teruggave (wat je nog moet teruggeven).

Voorbeeldje: Stel dat je 480 cent moet teruggeven. 480/200 = 2. Je moet dus twee munten van twee euro teruggeven. 480%200 = 80. Je moet hierna dus nog 80 cent teruggeven.

Op deze manier kan je voor elke munt uitrekenen hoeveel ervan je moet teruggeven en wat je dan nog overhoudt.
 
Ok het word hier al iets duidelijker, maar wat ik nog steeds niet begrijp is hoe ik dit moet formuleren in java.
Het principe snap ik wel maar de uitwerking ervan niet :p
Hopelijk kunnen jullie mij op weg helpen.
 
Laatst bewerkt:
Ik snap niet helemaal wat het probleem is. Je kan gewoon "Teruggave/200" en "Teruggave%200" gebruiken en hetzelfde voor alle andere munten.
 
Wat ik bedoel is dat ik niet weet hoe ik het moet opschrijven in java,
moet ik bijvoorbeeld het if else statement gebruiken en hoe moet ik het dan opschrijven.
Ik zou bijvoorbeeld niet weten hoe ik kan zorgen dat ik met JOptionPane.showMessageDialog en Teruggave / en Teruggave % kan zorgen dat er uiteindelijk de goede message gegeven word.

Wat ik kortom wil weten is in welke volgorde ik het neer kan zetten.
Misschien ben ik wel wat ints vergeten?
Heb je bijvoorbeeld voor elke munt een aparte in nodig?
Dat soort dingen wil ik weten dus.
 
heb nu een int gemaakt voor iedere munt, want ik nam aan dat dit ook moest gebeuren, nu de berekeningen juist invullen met waarschijnlijk het if principe.
Dit is nu mijn vraag hoe doe ik dit?
Bedankt voor je hulp trouwens, geweldig.

int TweeEuroMunten = Teruggave/200;
int ÉenEuroMunten = Teruggave/100;
int VijftigEuroCent = Teruggave/50;
int TwintigEuroCent = Teruggave/20;
int TienEuroCent = Teruggave/10;
int VijfEuroCent = Teruggave/5;
 
Beste kan je je variabelen met een kleine letter beginnen en elk opvolgend woord wel weer met een hoofdletter (zoals je al gedaan had).. zo wordt het volgens de code conventies zo goed al overal gedaan. Is ook voor anderen makkelijker om dan te begrijpen wat jij precies bedoeld.
Daarnaast geen letters met een accent gebruiken. Wil nogal eens verwarring opleveren en zijn niet eenvoudig te typen. Als je de zgn codecompletion gebruikt (wat je programmeerwerk toch een stuk kan versnellen) is het handig om dan gewone letters te gebruiken.

Verder.. als je een variabele voor de eerste keer aanmaakt aan het begin van de class, dan kan je het beste die niet meteen declareren met de waarde van een andere variabele.
Zoals je nu doet:
int eenEuroMunten = Teruggave/100;
is niet verstandig om al mee te beginnen. In grotere programma's kan je door zoiets te doen op een fout komen waar je tijden naar kan zoeken.
Beste dus beginnen met:
int eenEuroMunten = 0;
Die dan pas bewerkingen op de variabele uitvoeren als je die ook echt gebruikt.

Kan je nog eens de complete code zoals je het nu hebt geven?
 
Tot nu toe:

import javax.swing.*;

public class Cola {
public static void main(String[] arg) {
String input;
String output;
int Teruggave = 0;

input = JOptionPane.showInputDialog("Aantal invoeren");
int Aantal = Integer.parseInt(input);

input= JOptionPane.showInputDialog("Inworp in centen");
int Inworp = Integer.parseInt(input);

int Totaalprijs = Aantal * 125;

if (Inworp > 125) {
Teruggave = Inworp - Totaalprijs;
}

int tweeEuroMunten = 0;
int eenEuroMunten = 0;
int vijftigEuroCent = 0;
int twintigEuroCent = 0;
int tienEuroCent = 0;
int vijfEuroCent = 0;

Zoals jij het net zei, nu moet ik dus de munteenheden gaan aangeven.
Bedankt voor de hulp.
 
Was een blikje niet 1,60? :p

anyways hier is mijn versie:

Code:
import javax.swing.*;

class Blikje {

	/*
	 * cent2string geeft een string-weergave terug van muntstukken
	 */
	static String cent2string(int num) {

		int r200, r100, r50, r20, r10, r5;
		String msg = "";

		// 2-euro's
		r200 = num / 200;
		num = num % 200;

		// 1-euro's
		r100 = num / 100;
		num = num % 100;

		// 50 cent
		r50 = num / 50;
		num = num % 50;

		// 20 cent
		r20 = num / 20;
		num = num % 20;

		// 10 cent
		r10 = num / 10;
		num = num % 10;

		// 5 cent
		r5 = num / 5;
		num = num % 5;

		if( r200 != 0 ) msg += " " + r200 + "x200";
		if( r100 != 0 ) msg += " " + r100 + "x100";
		if( r50 != 0 )  msg += " " + r50  + "x50";
		if( r20 != 0 )  msg += " " + r20  + "x20";
		if( r10 != 0 )  msg += " " + r10  + "x10";
		if( r5 != 0 )   msg += " " + r5   + "x5";

		return msg + " ";
	}


	public static void main(String args[]) {

		int num, rest, totaal;
		String inp;

		totaal = rest = 160 * Integer.parseInt(JOptionPane.showInputDialog("Aantal blikjes?"));
		while( rest > 0 ) {

			inp = JOptionPane.showInputDialog(null, "Werp in: " + rest + "eurocent\n(" + cent2string(rest) + ")");

			// Cancel
			if( inp == null ) {

				rest = totaal - rest;
				break;
			}

			num = Integer.parseInt(inp);

			// 5 cent is minimum
			if( (num % 5) != 0 ) {

				JOptionPane.showMessageDialog(null, "Dat kan niet, 1- en 2 eurocenten bestaan niet meer!");

			} else if( num < 0 ) {

				JOptionPane.showMessageDialog(null, "Ik heb nog nooit van negatieve muntstukken gehoord...");

			} else {

				rest -= num;
				if( rest <= 0 ) {

					rest *= -1;
					break;
				}
			}
		}

		// Geef wisselgeld
		JOptionPane.showMessageDialog(null, "Wisselgeld:" + (rest > 0 ? cent2string(rest) : "geen"));

	} // main
}// class Blikje
 
svdww,

Leuk dat jij het zo hebt gemaakt. maar als je iemand gewoon de "oplossing" geeft.. zal diegene er minder van leren dan het zelf te doen.
 
svdww,

Leuk dat jij het zo hebt gemaakt. maar als je iemand gewoon de "oplossing" geeft.. zal diegene er minder van leren dan het zelf te doen.

Het is aan de TS om te kopiëren of te bestuderen en zijn eigen versie af te maken. Ik neem aan dat hij of zij zelf wel kan beslissen welk het beste is.
 
Deze is idd mooi gemaakt maar zoals je kon zien aan mijn eerdere compilatie werken wij op een andere manier dan wat jij hier voorstelt.
Als ik me niet vergis is dit iets geavanceerder als waar ik mee bezig ben op het moment.
Toch bedankt.
 
Nu heb ik iets als dit :
import javax.swing.*;

public class Cola {
public static void main(String[] arg) {
String input;
int Teruggave = 0;

input = JOptionPane.showInputDialog("Aantal invoeren");
int Aantal = Integer.parseInt(input);

input= JOptionPane.showInputDialog("Inworp in centen");
int Inworp = Integer.parseInt(input);

int Totaalprijs = Aantal * 125;

if (Inworp > 125) {
Teruggave = Inworp - Totaalprijs;
}

int tweeEuroMunten = 0;
int eenEuroMunten = 0;
int vijftigEuroCent = 0;
int twintigEuroCent = 0;
int tienEuroCent = 0;
int vijfEuroCent = 0;


String output;

if (Teruggave > 200) {
tweeEuroMunten= Teruggave / 200;
Teruggave = Teruggave % 200;
} else if (Teruggave > 100) {
eenEuroMunten = Teruggave / 100;
Teruggave = Teruggave % 100;
} else if (Teruggave > 50) {
vijftigEuroCent = Teruggave / 50;
Teruggave = Teruggave % 50;
} else if (Teruggave > 20) {
twintigEuroCent = Teruggave / 20;
Teruggave = Teruggave % 20;
} else if (Teruggave > 10) {
tienEuroCent = Teruggave / 10;
Teruggave = Teruggave % 10;
} else if (Teruggave > 5) {
vijfEuroCent = Teruggave / 5;
Teruggave = Teruggave % 5;

Maar nu moet ik er een string van maken natuurlijk, ik heb op internet gezocht maar de website van sun en de tutorial die erop staat is zo onduidelijk als de ....
Laatste vraag dit verder hebben jullie me al behoorlijk op weg geholpen :D
 
Een string maken kan op verschillende manieren:

String s = new String("hallo" + getal + ....");

String s = new String();
s = "Hallo";
s = s + getal;

of (beter)

StringBuilder sb = new StringBuilder();
sb.append("hallo");
sb.append(getal);
String s = sb.toString();

(Deze laatste optie is vaak sneller en kost minder geheugen.)


Maar ik heb nog wel een probleem met jullie oplossing.. Een goed programma is op de toekomst voorbereid... Dus als er een binnenkort een 13 cent munt stuk wordt uitgebracht ?

Moet je je programma flink aanpassen.. Extra variabelen,je if statement moet groter, je String klopt niet meer...
Als je gebruik gaat maken van klassen kan je zo'n uitbreiding veel eenvoudiger doen..

Verder zal je formule niet meer kloppen.:eek: Als ik 26 cent moet terug geven.. Dan zal jouw programma 20 + 5 + 1 terug geven..Terwijl 2 munten van 13 toch echt beter is :D
 
Dit is puur een oefening om te zien of je het beheerst, ik moet dus gewoon een simpele msg output hebben die laat zien hoeveel van elk, voorbereid op de toekomst maakt niet veel uit nu nog.
 
if (Teruggave > 200) {
tweeEuroMunten= Teruggave / 200;
Teruggave = Teruggave % 200;
} else if (Teruggave > 100) {
eenEuroMunten = Teruggave / 100;
Teruggave = Teruggave % 100;
} else if (Teruggave > 50) {
vijftigEuroCent = Teruggave / 50;
Teruggave = Teruggave % 50;
} else if (Teruggave > 20) {
twintigEuroCent = Teruggave / 20;
Teruggave = Teruggave % 20;
} else if (Teruggave > 10) {
tienEuroCent = Teruggave / 10;
Teruggave = Teruggave % 10;
} else if (Teruggave > 5) {
vijfEuroCent = Teruggave / 5;
Teruggave = Teruggave % 5;

Dit was inderdaad de oplossing die ik voor ogen had. Alleen gaat het volgens mij mis met het gebruik van if en else. Als Teruggave bijv. 260 is, zal het programma uitrekenen dat er twee munten van twee euro terug moeten worden gegeven en dat 'de nieuwe' Teruggave 60 is. Daar eindigt het programma, omdat het niet de 'else' tak in gaat.
 
Ok, maar wat stel je dan voor in plaats van de else variant, want iets anders kan ik niet op komen.

Dit had ik dan in gedachte :

import javax.swing.*;

public class Cola {
public static void main(String[] arg) {
String input;
int Teruggave = 0;

input = JOptionPane.showInputDialog("Aantal invoeren");
int Aantal = Integer.parseInt(input);

input= JOptionPane.showInputDialog("Inworp in centen");
int Inworp = Integer.parseInt(input);

int Totaalprijs = Aantal * 125;

if (Inworp > 125) {
Teruggave = Inworp - Totaalprijs;
}

int tweeEuroMunten = 0;
int eenEuroMunten = 0;
int vijftigEuroCent = 0;
int twintigEuroCent = 0;
int tienEuroCent = 0;
int vijfEuroCent = 0;


String output;

if (Teruggave > 200) {
tweeEuroMunten= Teruggave / 200;
Teruggave = Teruggave % 200;
if (Teruggave > 100) {
eenEuroMunten = Teruggave / 100;
Teruggave = Teruggave % 100;
}

if (Teruggave > 50) {
vijftigEuroCent = Teruggave / 50;
Teruggave = Teruggave % 50;
}

if (Teruggave > 20) {
twintigEuroCent = Teruggave / 20;
Teruggave = Teruggave % 20;
}

if (Teruggave > 10) {
tienEuroCent = Teruggave / 10;
Teruggave = Teruggave % 10;
}
if (Teruggave > 5) {
vijfEuroCent = Teruggave / 5;
Teruggave = Teruggave % 5;
}

Maar dan staat de vraag nog steeds hoe ik kan zorgen dat de message word:

"...." tweeEuroMunten
"...."eenEuroMunten etc etc
 
Laatst bewerkt:
Zoals je het nu doet is een mogelijkheid. Een andere mogelijkheid is om de "ifjes" gewoon weg te laten.

Heb je de methode van Skinflowers al geprobeerd voor de output?
 
Methode van Skinflowers word dan zoiets als
String s = "Teruggave" + tweeEuromunten + eenEuroMunten enz enz maar waarschijnlijk doe ik het helemaal fout, nog een tip of doe ik gewoon te moeilijk
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan