Ruby metod: Stirrat mig blind.

Permalänk
Medlem

Ruby metod: Stirrat mig blind.

Jag har nu ett nytt problem.

När jag ska lista alla lediga platser så ska det listas så här

Tomtplats 1 är ledig
Tomtplats 2 är ledig
Kalle, Johansson, Kallevägen 29, 031-443322
Tomtplats 4 är ledig
Tomtplats 5 är ledig
Tomtplats 6 är ledig
Niklas, Magnussons, Niklasvägen 11, 0405-243422

Alltså, när en plats inte är ledig, alltså upptagen, så ska namnet på kunden komma upp.
Det fungerar, men som sagt. Läs min förklaring här under så förstår ni

Och då använder jag mig utav följande kod.

if Tomtplats[1] == nil puts "Tomtplats 1 är ledig" elsif Tomtplats[1] =! nil puts Kunder.fetch(0, Kund)

Finns det inget lättare sätt? Jag menar, om jag ska lista alla 32 tomtplatser sådär, så kommer det bli en skitlång kod. Hur ser koden ut för att lista samtliga lediga tomter såsom jag visade, utan att behöva ha en miljard rader kod?

Vilken iterator ska jag använda mig utav?

Mvh.

Problem löst! Tack för hjälpen alla! Hejsan. Jag har bara stirrat mig blind, får felmeddelande efter felmeddelande. Min kod är

def genereraTomtplats plats = 1 + rand(32) gast = Tomtplats_Kund.new while Tomtplats[plats] != nil plats = 1 + rand(32) end Tomtplats[plats] = gast

Allting fungerar hittils förutom ett problem. Det koden gör är att den slumpar ett tal mellan 1 och 32. Om talet slumpas till t.ex 19 så blir det indexet för objektet. Men det är det att jag vill att objektet ska innehålla någonting också, och det ska ske i metoden också. Jag vill att plats(där talet slumpas) inte bara ska vara indexet, utan talet ska även skrivas in i objektet. Så att om jag senare skriver t.ex Tomtplats.fetch(5, Tomtplats_Kund) så ska den skriva ut talet som slumpades (I detta fallet ska talet 5 skrivas ut) Just nu skrivs ingenting ut, just nu så ersätts "nil" med en tomrad (vilket betyder att indexet pekas mot ett objekt, men objektet innehåller ingenting. Någon som har lite ideér? Mvh

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
Arvid Nordqvist-mannen
Permalänk

Är inte while-villkoret tvärt emot syftet ?
Så länge [plats] "inte är" tomt, så slumpa igen... tills en tom plats hittas.

Visa signatur

Windows 10 Pro x64 | inwin A1 Plus White | AMD Ryzen 9 3900X | Asus ROG Strix X570-I Gaming | Corsair 3600MHz 16GB | Sapphire Radeon RX 5700XT | Samsung SSD M.2. 960 Pro. 1TB | LG 4K OLED55C9PLA

Permalänk
Medlem
Skrivet av tcntad:

rand(322) och ran(32) ?

Hoppsan Korrigerat!

Waxinator:

Det är sant, vet inte varför den funkar :S

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
Skrivet av sAnden:

Problem löst! Tack för hjälpen alla!

Hejsan.
Jag har bara stirrat mig blind, får felmeddelande efter felmeddelande.

Min kod är

def genereraTomtplats plats = 1 + rand(32) gast = Tomtplats_Kund.new while Tomtplats[plats] != nil plats = 1 + rand(32) end Tomtplats[plats] = gast

Allting fungerar hittils förutom ett problem.
Det koden gör är att den slumpar ett tal mellan 1 och 32.
Om talet slumpas till t.ex 19 så blir det indexet för objektet.
Men det är det att jag vill att objektet ska innehålla någonting också, och det ska ske i metoden också.
Jag vill att plats(där talet slumpas) inte bara ska vara indexet, utan talet ska även skrivas in i objektet.
Så att om jag senare skriver t.ex
Tomtplats.fetch(5, Tomtplats_Kund) så ska den skriva ut talet som slumpades
(I detta fallet ska talet 5 skrivas ut)

Jag fattar ingenting.. varför ska du slumpa? Och varför ska du spara indexet i objektet på position:index? Jag menar, om du hämtar index 5 så vet du ju att det är index 5, varför spara värdet 5 på samma position? Det blir som att lägga en lapp i ditt postfack med adressen till postfacket..

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Jag fattar ingenting.. varför ska du slumpa? Och varför ska du spara indexet i objektet på position:index? Jag menar, om du hämtar index 5 så vet du ju att det är index 5, varför spara värdet 5 på samma position? Det blir som att lägga en lapp i ditt postfack med adressen till postfacket..

Hej! Tack för ditt svar
Saken vill att det slumpade numret ska kunna skrivas ut vid listningen av alla kunder.
Då måste jag väl ha en variabel eller ett objekt att hämta datan ifrån eller tänker jag fel?

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

Som du beskriver scenariot låter det som om kund 1 alltid kommer ha nummer 1, kund 2 alltid ha nummer 2 osv... Istället för att du då slumpar fram värdet 5 och stoppar in det i kund 5 så kan du ju lika gärna skriva ut numret på den kund du hämtar -- det vill säga index-värdet -- eller hur?

Varför vill du ha kunderna i slumpmässig ordning? Om du skulle ha 1000 kunder och behövde slumpa tills alla kunder blivit dragna skulle du kunna vänta i flera sekunder innan den sista kunden blev slumpmässigt utplockad.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Det är en skoluppgift. Det är därför jag inte rent frågar efter koder då jag vill lära mig, uppgiften säger att det ska slumpas en plats, platsen ska senare vara unik. Tomtplats och Kunder har två olika klasser.

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