Permalänk
Medlem

Javaproffs titta hit!

Hejsan!

Det är så här att jag har fått en uppgift inom java.
Den ser ut så här.

Du som kund går till affären.
Du har en 500-lapp med dig och handlar för 100 kronor.
Det som jag ska koda nu, ska räkna ut hur mycket du kommer få tillbaka i respektive valör.
Jag vill absolut inte att du ska skriva en färdig kod, det vill jag göra själv så jag lär mig. Men jag vill gärna att ni kommer med tips om vilken funktion jag ska läsa om för att underlätta arbetet.

För det som jag hittils har kommit fram till blir en oändlighet med if-satser.

Tacksam för svar.

Visa signatur

Samsung TFT 22" 2233RZ Svart 120HZ - 640GB Western Digital Black 64MB SATA III - Corsair 4GB (2x2048MB) 1333MHz XMS3-10600 - AMD Phenom2 X4 965 3,4GHz Black Edition - Gigabyte GeForce GTX 460 1GB OC - Fractal Design Define R3, Svart - Corsair TX 650W 80+ - Gigabyte GA-870A-UD3 - Cooler Master Hyper 212 Plus

Permalänk
Avstängd

Jag antar att du vill ha den mest logiska lösningen till vilka valörer du bör få tillbaka och inte en generell lösning med alla kombinationer? För den lösningen är lite jobbigare.

Du får ju först ta reda på skillnaden på valören du handlar för och det du köper. Låt oss kalla denna variabel dif.

Sedan så vore det nog bra att ha en lista med alla valörerna, störst till minst.
Så kollar du hur många utav den största valören som får plats i dif. Så har du en pekare som håller koll på vilken valör du är på och sedan kollar du med näst största valören osv. Så minskar du dif med valören*antalet som får plats.

Permalänk
Medlem

Titta på hur heltalsdivision fungerar i Java och titta också på hur man kan få "resten" vid en heltalsdivision med modulo-operatorn (%). Det är dessa man ska använda i ditt problem.

Permalänk
Medlem

Okej! Jag ska kolla på detta, tackar!

Det är förresten från enkronor upp till hundrasedlar som det gäller!

Visa signatur

Samsung TFT 22" 2233RZ Svart 120HZ - 640GB Western Digital Black 64MB SATA III - Corsair 4GB (2x2048MB) 1333MHz XMS3-10600 - AMD Phenom2 X4 965 3,4GHz Black Edition - Gigabyte GeForce GTX 460 1GB OC - Fractal Design Define R3, Svart - Corsair TX 650W 80+ - Gigabyte GA-870A-UD3 - Cooler Master Hyper 212 Plus

Permalänk
Medlem

Jag hade ju börjat med den största valören, sett hur många du kunde fått i växel, subtraherat dessa, fortsatt med nästa valör och så vidare. Heltalsdivision och modulo är som hivemind säger mycket relevanta.

Permalänk
Medlem

Okej jag har läst om modulo och heltalsdivision.

men jag får inte till det. Den kan räkna ut hur många hundralappar jag kommer få tillbaka i växen, men inte 50 lappar.

Jag vet inte riktigt hur man ska skriva det, jag skrev det som "variabelVaxelTillbaka%variablelFemtiolappar"

Men den visar bara 0. Jag började med java i förrgår så är ganska blank.
Men hur hade ni skrivit?

Visa signatur

Samsung TFT 22" 2233RZ Svart 120HZ - 640GB Western Digital Black 64MB SATA III - Corsair 4GB (2x2048MB) 1333MHz XMS3-10600 - AMD Phenom2 X4 965 3,4GHz Black Edition - Gigabyte GeForce GTX 460 1GB OC - Fractal Design Define R3, Svart - Corsair TX 650W 80+ - Gigabyte GA-870A-UD3 - Cooler Master Hyper 212 Plus

Permalänk
Medlem

Så här skulle jag tänka

function växel(p): värden = lista 1000 500 100 etc resultat = tom lista för varje värde v: resultat lägg till på slutet (kvoten p/v) p = resten p/v

Då ska resultatet innehålla andelen 1000, 500 etc. enheter som ska ges tillbaka.

EDIT: det går förståss att skriva detta som en hel radda if-satser, men det är bara onödigt. Försök använda en loop som loopar över de olika valörer du kan lämna tillbaka.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av sAnden
Okej jag har läst om modulo och heltalsdivision.

men jag får inte till det. Den kan räkna ut hur många hundralappar jag kommer få tillbaka i växen, men inte 50 lappar.

Jag vet inte riktigt hur man ska skriva det, jag skrev det som "variabelVaxelTillbaka%variablelFemtiolappar"

Men den visar bara 0. Jag började med java i förrgår så är ganska blank.
Men hur hade ni skrivit?

Det är inte riktigt så det fungerar. Modulo-operatorn ger resten då man utför en heltalsdivision, dvs:

85/50 = 1 85%50 = 35

Du vill ha det första värdet, då detta är antalet femtiolappar du kan ge i växel, och det andra värdet, då detta är hur mycket mer du ska ge i växel, utöver femtiolapparna.

Permalänk
Hedersmedlem

int hundra = 0;

if (växel >= 100){
hundra = växel/100;
växel = växel%100
}

Dold text

här får du ut antal hundralappar och resterande växelsumma. Sedan får du repetera denna process med alla andra valörer i fallande ordning. Fast det var kanske så du inte ville göra.
Jag är själv rätt grön på javan, så det finns kanske mycket enklare sätt...

Visa signatur

🎮 → Node 304 • Ryzen 5 2600 + Nh-D14 • Gainward RTX 2070 • 32GB DDR4 • MSI B450I Gaming Plus AC
🖥️ → Acer Nitro XV273K Pbmiipphzx • 🥽 → VR: Samsung HMD Odyssey+
🎧 → Steelseries arctic 7 2019
🖱️ → Logitech g603 | ⌨️ → Logitech MX Keys
💻 → Lenovo Yoga slim 7 pro 14" Oled

Permalänk
Medlem

Tack så sjukt mycket! Nu har jag löst det Glad att jag inte fick tonvis med kod att "kopiera" nu har jag verkligen lärt mig något. Missuppfattade modulo-operatorn grovt! Tack igen!

Visa signatur

Samsung TFT 22" 2233RZ Svart 120HZ - 640GB Western Digital Black 64MB SATA III - Corsair 4GB (2x2048MB) 1333MHz XMS3-10600 - AMD Phenom2 X4 965 3,4GHz Black Edition - Gigabyte GeForce GTX 460 1GB OC - Fractal Design Define R3, Svart - Corsair TX 650W 80+ - Gigabyte GA-870A-UD3 - Cooler Master Hyper 212 Plus

Permalänk
Medlem

Principen är att antalet sätt att växla en summa, givet ett antal valörer är antalet sätt att växla samma summa utan högsta valören + antalet sätt att växla den summa man får om man subtraherar den högsta valören.

public class Vaxel {
private static int[] change = {1,5,10,50,100}; // valörer
private static final int valörer = 5; // antal valörer

public static int count(int a) {
return count(a, valörer); // wrapper
}

public static int count(int a, int n) {
if (a == 0) return 1;
else if (a < 0 || n == 0) return 0;
else
return count(a,n-1) + count(a-change[n-1],n);
}

public static void main() {
int a = 73;
System.out.println("Svar: " + count(a));
}
}