Programmering 2 Omvandling av strängar

Permalänk
Medlem
Skrivet av perost:

Random.Next returnerar ett slumptal som är större eller lika med 0 samt mindre än argumentet (eller 0 om argumentet är 0). Så just den biten är nog rätt så länge som listan inte är tom.

Men jo, debuggern är nog rätt väg att gå annars. Här är en kort guide för hur debuggern används.

Japp, fel av mig!
Det var några år sedan jag kodade i C# och var tydligen för lat för att kolla upp huruvida den var inklusiv

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk

Testade att skriva in 2 inom [random.Next()] men samma sak hände, index out of range, för att se vad som händer. Sen kollade jag om någonting skulle hända om jag tog bort typ under string[] vektor, trodde att det blev index out of range eftersom det stod titel = 0, författare = 1, typ = 2, utgivare = 3, tillgänglig = 4, blir total 5 element.

När jag använde debbugern så hovra jag muspekaren över boklista och ändra den llilla popup-rutan till 1, men fortfarande samma problem.

Skärmbild:
https://imgur.com/YQ5swWc

Skärmbild popup-rutan:
https://imgur.com/Vb3QYmv

Permalänk

Du kan även ta bort vectorList då det enda du använder den till är att mellanlagra resultatet av din item.Split, vilket även detta är helt onödigt.

string[] vektor = item.Split(new string[] { "####" }, StringSplitOptions.None);

Så item.Split är också onödigt? Hur ska jag göra då?
Läste för snabbt.

Skärmbild från mitt kurstillbehör:
https://imgur.com/gXAwft4

Förstår om ni facepalmar just nu men vill verkligen att detta programmet ska funka

Permalänk
Medlem
Skrivet av Field_trip:

Så item.Split är också onödigt? Hur ska jag göra då?

Nej, det är vectorList som är onödig, du använder den aldrig för något annat än att bara spara resultatet av splittarna.

När det gäller problemet du har så visar debuggern att listan är tom eftersom Count = 0. Jag skulle rekommendera att du sätter i breakpoint i Fileloader-metoden och stegar igenom den för att se om några böcker faktiskt läggs till.

Permalänk

Jag gjorde det, den hoppar direkt ner till MessageBox. Jag förstår inte varför ingenting läggs till?

Permalänk
Medlem
Skrivet av Field_trip:

Jag gjorde det, den hoppar direkt ner till MessageBox. Jag förstår inte varför ingenting läggs till?

Gissningsvis hittar den inte filen, vilket resulterar i att du istället hoppar till din else

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk

Hur kan jag fixa det? Jag har först att ange hela mappsökvägen (C:\\) men den vill inte ge sig.

Min lärares kommentar till textfilen:
https://imgur.com/bjXxk84

Ska jag använda en tryCatch?

Permalänk
Medlem
Skrivet av Field_trip:

Hur kan jag fixa det? Jag har först att ange hela mappsökvägen (C:\\) men den vill inte ge sig.

Min lärares kommentar till textfilen:
https://imgur.com/bjXxk84

Ska jag använda en tryCatch?

Var har du sparat filen? För att din nuvarande sökväg ska fungera måste den troligtvis ligga i projektets "bin\debug".

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk

Omg tack, den var visst inte där.

Permalänk

Nu är det index out of range exception på string författare = vektor[1]. Vad kan jag ändra på här? Ska jag ändra på ordningen i koden så att mina böcker inom min switch sats ligger över mina string[] = vektorer? Så böckerna hinner läggas till i bokListan?

Jag satte en breakpoint vid file.exists, så när den kommer ner till sttring titel = vektor[0] funkar den men när den kommer till string författare = vektor[1], där stannar den och får undex out of range. Använde F10 step-over

Så frustrerande

Permalänk
Medlem
Skrivet av Field_trip:

Nu är det index out of range exception på string författare = vektor[1]. Vad kan jag ändra på här? Ska jag ändra på ordningen i koden så att mina böcker inom min switch sats ligger över mina string[] = vektorer? Så böckerna hinner läggas till i bokListan?

Jag satte en breakpoint vid file.exists, så när den kommer ner till sttring titel = vektor[0] funkar den men när den kommer till string författare = vektor[1], där stannar den och får undex out of range. Använde F10 step-over

Så frustrerande

Varför tror du att du behöver ha något i bokList? Jag frågar bara för att jag vill få dig att fundera över vad koden gör, inte för att vara taskig

Kolla innehållet i filen och jämför separatorn med vad du har i din split, räkna antalet tecken.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk

För att slumpa en random bok till användaren när han/hon trycker på knappen? Ne, de e lugnt. Är kinda slow.

Permalänk
Medlem
Skrivet av Field_trip:

För att slumpa en random bok till användaren när han/hon trycker på knappen? Ne, de e lugnt. Är kinda slow.

Problemet uppstår redan när du gör din split. Om separatorn är fel, d.v.s. det/de tecken som raden ska splittras på, kommer du endast få ett element i den resulterande vektorn. Därför fungerar första indexet, men inte nästkommande.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk

Nu funkar det Råkade skriva #### fyra tecken istället för tre som i textfilen.

Nu uppstår slump-problemet igen, programmet stängs inte ner nu när jag trycker på knappen, men ingenting slumpas i min textbox? Jag använder detta i min button1_Click:

private void button1_Click_1(object sender, EventArgs e) { Random random = new Random(); bokLista[random.Next(bokLista.Count)].ToString(); }

Permalänk
Medlem
Skrivet av Field_trip:

Nu funkar det Råkade skriva #### fyra tecken istället för tre som i textfilen.

Nu uppstår slump-problemet igen, programmet stängs inte ner nu när jag trycker på knappen, men ingenting slumpas i min textbox? Jag använder detta i min button1_Click:

private void button1_Click_1(object sender, EventArgs e) { Random random = new Random(); bokLista[random.Next(bokLista.Count)].ToString(); }

Du gör inget med resultatet av din slumpning. Testa att sätta resultatet till din textbox Text-fält.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk

Jag skrev textBox1.Text = bokLista; men det funka inte, och när jag skrev in textBox1.Text = bokLista[random.Next(bokLista.Count)].ToString(); så blir det rött under random, hur ska jag göra?

Permalänk

Jag skrev textBox1.Text = bokLista[random.Next(bokLista.Count)].ToString(); igen och det funkade, men den slumpar "tillgänglig" och "otillgänglig", hur fixar jag så den slumpar böckerna och inte bool värdet?

Permalänk
Medlem
Skrivet av Field_trip:

Jag skrev textBox1.Text = bokLista[random.Next(bokLista.Count)].ToString(); igen och det funkade, men den slumpar "tillgänglig" och "otillgänglig", hur fixar jag så den slumpar böckerna och inte bool värdet?

Problemet är dina

public override string ToString() { if (tillgänglig) { return "tillgänglig"; } else { return "otillgänglig"; } }

Så din slumpning fungerar antagligen, bara att du inte skriver ut annat är tillgänglig/otillgänglig.

Permalänk

Tack alla, uppskattar det verkligen!
Har lite kvar dock tills att programmet blir godkänt

Hur får jag min label in i min textbox? Den ska vara i svag grå färg

Skärmbild:
https://imgur.com/MH2AURP

Permalänk
Skrivet av Field_trip:

Har vant mig med att använda readline för att stanna upp program i konsolapplikationer.

Om du bara vill att en tråd i programmet ska pausas så att du kan verifiera att det ser rätt ut, kan du använda MessageBox.Show("Hello World!"); så blir det en paus tills du tryckt på OK-knappen. Det finns dock risk att kod fortfarande körs i någon annan tråd.

Skrivet av Field_trip:

Hur får jag min label in i min textbox? Den ska vara i svag grå färg

Rita en label ovanpå textboxen. Tror BackColor = ControlDark blir bra. Du kan behöva ändra MinimumSize så att den täcker knappen och textboxen. Sedan högerklickar du på din label så dyker det upp en meny:

Välj tredje översta för att den ska hamna bakom knappen och textboxen så att dessa inte skyms:

Permalänk

Label behövdes inte, jag ändrade bara min placeholdertext i min textbox properties

Permalänk

Programmering 2

Hej, jag försöker nu ge mig in på TCP-programmering, men jag fattar inte varför ingenting dyker upp när jag trycker F5?

Skärmbild på koden:
https://imgur.com/Xe9FpDc

Permalänk
Medlem
Skrivet av Field_trip:

Hej, jag försöker nu ge mig in på TCP-programmering, men jag fattar inte varför ingenting dyker upp när jag trycker F5?

Skärmbild på koden:
https://imgur.com/Xe9FpDc

Hur ser själva formuläret ut? Koden du visar hanterar bara vad som ska hända när man trycker på knappar osv, men jag antar att frågan är varför det inte finns några knappar?

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk

Ja precis, inga knappar visas, ingen textruta visas heller när jag kör programmet. Varför?

Permalänk
Medlem

pekar debuggern på rätt projekt?

Permalänk

Haha ja.

Permalänk
Medlem

InitializeComponent(); ?

Permalänk
Skrivet av Hot Dogs:

InitializeComponent(); ?

Jag har den men det fungerar inte Glömde public Form1()

Permalänk

Detta är riktigt häftigt : https://imgur.com/jq4bObG

Kan man använda någon annan adress än 127.0.0.1?

Permalänk
Medlem
Skrivet av Field_trip:

Kan man använda någon annan adress än 127.0.0.1?

127.0.0.1 avser samma dator som det skickas ifrån, kallas ibland också localhost.

Du borde kunna skriva in adressen för datorn i det lokala nätverket istället. På windows kan man få reda på den genom att skriva in

ipconfig /all

i kommandotolken (cmd.exe). Då kan du köra klienten på en annan dator i det lokala nätverket också.

Ett tredje ip för att nå servern från internet kan ses från whatismyip.com. För att det ska fungera i ett vanligt hemnätverk får man sätta up portforwarding i routern. En regel där din specificerade port dirigerar trafik till ipt för servern i det lokala nätverket behöver konfigureras i routern. Man kanske också behöver godkänna appens trafik i eventuell brandvägg.