Problem med skoluppgift i Java.

Permalänk
Medlem

Problem med skoluppgift i Java.

Hejsan.

Jag har problem med en skoluppgift. Jag ska göra ett program som talar om för en kassörska hur mycket en kund ska få tillbaka i växel och i vilka valörer. Man ska använda sig av modulus operatorn. Min kod ser ut så här:

import javax.swing.*;

public class Uppgift2 {

public static void main(String[] args) {

int tillbaka, hundraLapp, femtioLapp, tjugoLapp, tia, femma, krona;
int attBetala = Integer.parseInt(JOptionPane.showInputDialog("Hur mycket ska kunden betala?"));
int kundenBetala = Integer.parseInt(JOptionPane.showInputDialog("Kunden gav: "));

tillbaka = kundenBetala - attBetala;
hundraLapp = tillbaka / 100;
krona = tillbaka % 100;
femtioLapp = krona / 50;
krona = tillbaka % 50;
tjugoLapp = krona / 20;
krona = tillbaka % 20;
tia = krona / 10;
krona = tillbaka % 10;
femma = krona / 5;
krona = krona % 5;

JOptionPane.showMessageDialog(null, "Kunden ska ha tillbaka: " + tillbaka + "\nI dessa valörer:" +
"\nHundralappar: " + hundraLapp + "\nFemtiolappar: " + femtioLapp +
"\nTjugolappar: " + tjugoLapp + "\nTia: " + tia + "\nFemma: " + femma +
"\nEnkronor: " + krona);

}

}

När jag kör det så funkar det ganska bra, MEN. Det blir nått tjall runt tian tror jag det kan säkert vara nått annat fel men det verkar vara där ikring. Jag vill inte ha en färdig kod bara att någon vänlig själ som kan kolla och tipsa.

Tack på förhand

Permalänk
Medlem

jag tror att du missat att dra av summan på valör som du beräknar. dvs om du ska få tillbaks 255:- ocj beräknar hur många hundralappar du ska få tillbaks så är det två hundralappar. men dom två hundralapparna ska dras ifrån "tillbaka" innan du beräknar 50-lappar och så vidare.
hoppas jag inte lurat dig nu.

Skickades från m.sweclockers.com

Visa signatur

schack rules, i don't...:-(

Permalänk
Medlem

Problemet är att 50 kr inte delas jämnt i 20 lappar.

krona = tillbaka % 20; tia = krona / 10;

dvs efter tillbaka%20 kommer du inte alltid ha rätt summa att dela upp tiorna i de fall då en femtiolapp ska ges i retur.

Permalänk
Medlem

hmmm, det blir ju någon sort nedräkning om jag förstår det hela rätt. men om du tar och använder krona istället för tillbaka.

hundraLapp = tillbaka / 100;
krona = krona % 100;
femtioLapp = krona / 50;
krona = krona % 50;
tjugoLapp = krona / 20;
krona = krona % 20;

om jag tänkt rätt nu

Skickades från m.sweclockers.com

Visa signatur

schack rules, i don't...:-(

Permalänk
Medlem
Skrivet av smurfzg:

Problemet är att 50 kr inte delas jämnt i 20 lappar.

krona = tillbaka % 20; tia = krona / 10;

dvs efter tillbaka%20 kommer du inte alltid ha rätt summa att dela upp tiorna i de fall då en femtiolapp ska ges i retur.

Om man kör programmet o man skriver att man ska få tillbaka 50 kr så säger det en femtiolapp och en tia. Och om man ska få tillbaka typ 280 så säger det att man ska få 2 hundringar en femtiolapp en tjuga och inget mer.

Permalänk
Hedersmedlem

Du räknar ner det kvarvarande från varje division i krona men sedan använder du tillbaka för att räkna modulus. Om du istället använder krona för att räkna modulus borde det bli rätt. Alternativt räknar du ner tillbaka istället, dvs:

tillbaka = kundenBetala - attBetala;

hundraLapp = tillbaka / 100;
tillbaka = tillbaka % 100;

femtioLapp = tillbaka / 50;
tillbaka = tillbaka % 50;

tjugoLapp = tillbaka / 20;
tillbaka = tillbaka % 20;

tia = tillbaka / 10;
tillbaka = tillbaka % 10;

femma = tillbaka / 5;

krona = tillbaka % 5;

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av taimanov:

hmmm, det blir ju någon sort nedräkning om jag förstår det hela rätt. men om du tar och använder krona istället för tillbaka.

hundraLapp = tillbaka / 100;
krona = krona % 100;
femtioLapp = krona / 50;
krona = krona % 50;
tjugoLapp = krona / 20;
krona = krona % 20;

om jag tänkt rätt nu

Skickades från m.sweclockers.com

Japp det var där skon klämde. Det var det jag misstänkte för annars räknar den väl hela tiden på "tillbaka" eller har jag fel här ?

Tack iallafall.

Permalänk
Medlem
Skrivet av Mr_189:

Om man kör programmet o man skriver att man ska få tillbaka 50 kr så säger det en femtiolapp och en tia. Och om man ska få tillbaka typ 280 så säger det att man ska få 2 hundringar en femtiolapp en tjuga och inget mer.

orsaken är att du beräknar antalet tior på att du tar mod 20 på totala antal kronor du ska få tillbaks. dvs 280 mod 20 blir noll i rest. därför måste det räknas ned

Skickades från m.sweclockers.com

Visa signatur

schack rules, i don't...:-(

Permalänk
Medlem

Lite bättre strukturerad

/*
* Klistra in, kompilera och kör
* Det här programmet kan använda alla valutor. Det är bara att modifiera listan i metoden getCashback();
*/

public class Machine {

public static class Money{
public Money(int unit, int value){
this.unit = unit;
this.value = value;
}

public int unit;
public int value;
}

/**
* @param args
*/

public Money[] getCashback(int value){
Money[] cashback = {
new Money(100,0),
new Money(50,0),
new Money(20,0),
new Money(10,0),
new Money(5,0)
};

for(int i=0; i<=cashback.length-1; i++){
cashback[i].value = value / cashback[i].unit;
value = value % cashback[i].unit;
}

return cashback;
}

public void printCashback(int paid, int total){
print(paid - total, getCashback(paid - total));
}

public void print(int back, Money[] cashback){
System.out.println("Tillbacka: " + back);

for(int i=0; i<cashback.length; i++){
System.out.print((i>0 ? "," : "") + cashback[i].value + ":" + cashback[i].unit);
}
}

public Machine(){

}

public static void main(String[] args) {

int total = 220;
int paid = 475;

Machine machine = new Machine();

machine.printCashback(paid,total);
}

}

Permalänk
Medlem
Skrivet av riemaxi:

/*
* Klistra in, kompilera och kör
* Det här programmet kan använda alla valutor. Det är bara att modifiera listan i metoden getCashback();
*/

Vet inte varför man återupplivar en 2 veckor gammal tråd men men.
Valutor är inte samma sak som valörer btw
Lite overkill struktur för något som tar någon minut att lösa med en loop som ger samma resultat.
Typ:

static int[] values = {500,100,50,20,10,5,1}; public static void main(String[] args) { int total = 220; int paid = 475; for(int i = 0, change = paid - total; i < values.length; i++, change= i != 0 ? change%values[i-1] : change){ System.out.println(String.format("Change (%3d): %d", values[i], change/values[i])); } }

Yeye hoppas tråden får förbli död nu iaf ;<

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem

Fyra viktiga saker:

1- Tack är alltid välkommen ...
2 - Ny kunskap dör aldrig
3 - och viktigast .. din lösning skulle inte överleva ett enkelt MVC överblick ... den blandar logik med presentation
4 - igen ... tack är alltid välkommen

Permalänk
Medlem
Skrivet av riemaxi:

Fyra viktiga saker:

1- Tack är alltid välkommen ...
2 - Ny kunskap dör aldrig
3 - och viktigast .. din lösning skulle inte överleva ett enkelt MVC överblick ... den blandar logik med presentation
4 - igen ... tack är alltid välkommen

1. Inte min tråd, finns inget att tacka för.
2. Eh... ok?
3. Kul att du lärt dig en akronym, sen hur MVC kommer in i den här kontexten är för mig ett mysterium utan dess like. Du ska inte skapa lite Spring dependency injection, cache och transaktionshantering etc, maven integration med egen artifactory samt deploya hans växeluppgift till en fullfjädrad EE-container m.h.a.hudson samt få ut miljöspecifik config via puppet i en redundant zabbix-övervakad servermiljö medan du ändå håller på?
4. Fortfarande inte TS.-.-

Sen så stavas det "tillbaka" och inte "tillbacka" btw, samt klassmedlemmar skall inte vara public såvida de inte är konstanter

Puss sötis<3

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |