Permalänk

Java skoluppgift. Bankomat

Hej! Jag har en uppgift där jag ska göra en (enkel) bankomat som bara har 100 sedlar och 500 sedlar.

Exempel:
Om man skriver in 670 ska det stå:
500 sedlar: 500kr
100 sedlar: 200kr

Så här långt har jag kommit:

Scanner input = new Scanner(System.in); System.out.print("Uttag: "); int enteredValue = input.nextInt(); int realValue = (enteredValue + 50) / 100 * 100; if (realValue < 100) { realValue = 100; }

Allt den gör är att runda nummret till närmaste 100.

Hur kommer jag vidare?

Visa signatur

We all got a chicken-duck-woman-thing waiting for us

CPU: Intel Core i7 10700K
GPU: Nvidia GTX 1080
RAM: DDR4 16 GB

Permalänk
Medlem

Du vill troligtvis använda heltalsdivision och modulo (%). Heltalsdivision, d.v.s. division av int, kapar bara decimalerna, medan modulo returnerar resten av divisionen. Så t.ex.:

13 / 5 = 2 // 5 går 2 gånger på 13. 13 % 5 = 3 // 13 delat med 5 ger 3 över.

Permalänk
Medlem

Även ett bra tillfälle att använda en whileloop om man finner det kul.

Permalänk

Nu har jag gjort så att den delvis funkar:

Scanner input = new Scanner(System.in); System.out.print("Uttag: "); int enteredValue = input.nextInt(); int realValue = (enteredValue + 50) / 100 * 100; if (realValue < 100) { realValue = 100; } int value500 = realValue / 500; int split = realValue - 500; int value100 = split / 100; System.out.println("Uttag i 500-sedlar: " + value500); System.out.println("Uttag i 100-sedlar: " + value100); }

Problemet är om jag tar tal som är över 1000. Då skriver den för många 100 lappar. Hur fixar jag det?
Exempel: Om jag skriver 2674 så står det 5 500 sedlar (rätt), men 22 100 sedlar (fel).

Visa signatur

We all got a chicken-duck-woman-thing waiting for us

CPU: Intel Core i7 10700K
GPU: Nvidia GTX 1080
RAM: DDR4 16 GB

Permalänk

Om du tittar på din int split rad... Det enda du gör där är att ta bort endast en femhundring, oavsett hur många femhundringar som tas ut. Det är därför du får fel antal 100 lappar.

Så om du fixar den raden så borde det fungera mycket bättre

Visa signatur

Moderkort: Gigabyte B550 Aorus Elite CPU: AMD Ryzen 5600X Ram: 16GB Ballistix 3600MHz CL16 GPU: ASUS TUF Gaming 3070 SSD: Kingston KC2000 1TB, Crucial MX500 512GB, Seagate 600 SSD 480GB PSU: Seasonic Focus GX650W 80+Guld Chassi: Phanteks P400A

Permalänk

@Basketigge: lade till

* value500

Så fixades allt! Tack!

Visa signatur

We all got a chicken-duck-woman-thing waiting for us

CPU: Intel Core i7 10700K
GPU: Nvidia GTX 1080
RAM: DDR4 16 GB

Permalänk
Keeper of Traditions

Precis samma skoluppgift postades här i forumet för ett par veckor sedan, den verkar vara populär

Visa signatur

|| AMD Ryzen 9800X3D || Asus RTX 4070 TI Super TUF || Samsung 990 PRO 4TB || Kingston Fury CL30 64GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 ||

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk

@Dunder: det var jag d=
det här var en fortsättning på samma uppgift

Visa signatur

We all got a chicken-duck-woman-thing waiting for us

CPU: Intel Core i7 10700K
GPU: Nvidia GTX 1080
RAM: DDR4 16 GB

Permalänk
Hedersmedlem
Skrivet av MariusFranzen:

@DunderKlumpen: det var jag d=
det här var en fortsättning på samma uppgift

Det är ingen fara att fortsätta i samma tråd även om den blivit lite gammal eller du själv senast skrev i den. Det hjälper de som hjälper att få lite bakgrund också

Permalänk
Medlem

Bra att du lyckades lösa uppgiften! Tänkte ändå nämna modulo-operatorn som nämnts tidigare i tråden en gång till, eftersom den används ganska ofta.

Modulo (%) ger alltså resten efter en heltalsdivision, d.v.s det som blir över. 10 % 3 blir 1, eftersom 3 går i 10 tre gånger, och det blir 1 över.

Din split kunde skrivas som

int split = realValue % 500;

Man tar då bort 500 från realValue så många gånger som möjligt, och split får värdet av det som blir kvar.