Vektor följer ej med till ny metod?

Permalänk

Vektor följer ej med till ny metod?

Hej,

Jag har skapat två vektorer där ena vektorn är fylld med tal och den andra har plats för 10 nummer för användaren att fylla.

Dessa två lägger jag ihop i en Lista och omvandlar listan till en vektor (det måste vara en vektor, skoluppgift ni vet).
Jag skriver ut den sammansatta vektorn och allt ser frid och fröjd ut.

Med sedan i ska jag in i annan metod där den sammansatta vektorn skall anropas - då är den nollad - vad kan det bero på?

var fylld_plats = new List<int>(); fylld_plats.AddRange(förinställda_platser); fylld_plats.AddRange(påfyllnads_platser); int[] antal_passagerare = fylld_plats.ToArray(); Console.WriteLine("Åldersfördelningen på passagerarna ser nu ut enligt: "); foreach (int ålder in antal_passagerare) { Console.Write($"{ålder} "); } Console.WriteLine(); Console.ReadKey(); return antal_passagerare;

Permalänk
Medlem

För att eliminera det enklaste först, förinställda_platser och påfyllnads_platser är inparametrar till funktionen? Hur ser anropet ut?

Permalänk

Problemet förmodar jag är att angivna element i vektorerna inte lagras korrekt i int[] antal_passagerare;, för den skrivs ut kanon i samma metod men när man anropar vektorn i annan metod är den nollad.

Har försökt lösa genom att skapa en metod(Totalen) med vektorn i som jag skall kunna anropa i andra metoder för att slippa ange nedan kod, några tips?

public int[] förinställda_platser = new int[10] { 15, 44, 25, 87, 60, 14, 13, 65, 29, 31 }; public int[] påfyllnads_platser = new int[15]; public int[] antal_passagerare; //sammansatta vektorn public int[] Totalen(int[] förinställda_platser, int[]påfyllnads_platser) { var fylld_plats = new List<int>(); fylld_plats.AddRange(förinställda_platser); fylld_plats.AddRange(påfyllnads_platser); int[] passagerare = fylld_plats.ToArray(); return passagerare; }

Permalänk
Medlem

Koden du har givit ger inte tillräckligt information för att förstå vart problemet uppstår.
Du har varken länkat någon metod eller vart du anropar den.

Tror jag har en aning om vad problemet är, men behöver se mer kod för att vara säker.

Permalänk

@zaibuf: redigerade precis mitt inlägg och har förhoppningsvis förtydligat min frågeställning, om inte låt mig veta så ska jag försöka igen!

Permalänk
Medlem
Skrivet av Eusmeralda:

@zaibuf: redigerade precis mitt inlägg och har förhoppningsvis förtydligat min frågeställning, om inte låt mig veta så ska jag försöka igen!

och vart anropar du metoden och använder arrayen där allt är nollat?

Permalänk

@zaibuf: som det ser ut nu anropar jag varken metod eller vektor, utan har skrivit ut koden för den sammansatta vektorn, där koden anropar de två vektorerna som tillsammans bildar den sammansatta vektorn (passagerare), enligt nedan kod:

var fylld_plats = new List<int>(); fylld_plats.AddRange(förinställda_platser); fylld_plats.AddRange(påfyllnads_platser); int[] passagerare = fylld_plats.ToArray();

Hade gärna sett att jag skulle kunna anropa int[] passagerare;(sammansatt vektor) i andra metoder genom ett metodanrop, då jag önskar göra vidare beräkningar på vektorn. Såhär jag har försökt skapa metoden, men har nog kommit vilse på vägen, för den gör inte som jag önskar:

public int[] Totalen(int[] förinställda_platser, int[]påfyllnads_platser) { var fylld_plats = new List<int>(); fylld_plats.AddRange(förinställda_platser); fylld_plats.AddRange(påfyllnads_platser); int[] passagerare = fylld_plats.ToArray(); return passagerare; }

Man skulle väl kunna sammanfatta min frågeställning enligt:
- Varför fylls inte platserna i vektorn int[] passagerare med de två andra vektorernas värde. Har jag missat något i koden?
- Om det inte går att föra över värden från två vektorer till en, kan jag då skapa en Metod med ovan kod så jag kan anropa Metoden Totalen() istället för hela koden?

Permalänk
Medlem
Skrivet av Eusmeralda:

@zaibuf: som det ser ut nu anropar jag varken metod eller vektor, utan har skrivit ut koden för den sammansatta vektorn, där koden anropar de två vektorerna som tillsammans bildar den sammansatta vektorn (passagerare), enligt nedan kod:

var fylld_plats = new List<int>(); fylld_plats.AddRange(förinställda_platser); fylld_plats.AddRange(påfyllnads_platser); int[] passagerare = fylld_plats.ToArray();

Hade gärna sett att jag skulle kunna anropa int[] passagerare;(sammansatt vektor) i andra metod genom ett metodanrop, då jag önskar göra vidare beräkningar på vektorn. Såhär jag har försökt skapa metoden, men har nog kommit vilse på vägen, för den gör inte som jag önskar:

public int[] Totalen(int[] förinställda_platser, int[]påfyllnads_platser) { var fylld_plats = new List<int>(); fylld_plats.AddRange(förinställda_platser); fylld_plats.AddRange(påfyllnads_platser); int[] passagerare = fylld_plats.ToArray(); return passagerare; }

Enklast är då att spara det i en variabel, antar att du läst om klasser och field variabler då du använt public på alla dina arrayer ovan metoden?
Annars kan du anropa metoden via en instance av klassen.
Sen kanske de övriga bör vara privata och du endast kan anropa specifika metoder som ändrar i arrayerna.

Exempel med en fiddle https://dotnetfiddle.net/kehgg7

Sen ett tips som jag ger redan nu, koda ALLTID på engelska.

Permalänk

@zaibuf: Naeh field variabler har vi inte hanterat. Är Programmering 1 skoluppgift där jag går mot principen Keep It Simple Stuipd å de grövsta.

Just nu fungerar det att skriva koden och jag får rätt resultat, var mest att det inte är så OOP som önskat och motar Don't Repeat Yourself - därav önskemål om Metod

Vid metodanropet får jag upp klassikern;
"There is no argument given that corresponds to the required formal parameter 'förinställda_platser' of 'Buss.Totalen(int[], int[])"

Hint om vad det innebär?

Vad gäller public tänkte jag se över dessa så fort resten fungerar, samma sak med engelskan. Men tack för tipset!

Permalänk

Men ibland ska man ha tur göra metodanropet korrekt

nu ser koden ut enligt nedan och resultatet verkar fungera:

int[] passagerare=Totalen(förinställda_platser, påfyllnads_platser); Console.WriteLine("Åldersfördelningen på passagerarna ser ut enligt nedan: "); foreach (int ålder in passagerare) { Console.Write($"{ålder} "); }

Permalänk
Medlem

Detta kanske kan hjälpa dig förstå hur saker fungerar?

Kod:

using System; using System.Collections.Generic; class MainClass { public static void Main (string[] args) { int[] a = new int[5]{ 10, 11, 12, 13, 14 }; int[] b = new int[3]; // Skapar { 0, 0, 0 } List<int> c = new List<int>(); c.AddRange(a); for (int i = 0; i < b.Length; i++) { Console.Write($"Ange tal på plats {i}: "); b[i] = Int32.Parse(Console.ReadLine()); } c.AddRange(b); Console.WriteLine("Min lista: "); for (int i = 0; i < c.Count; i++){ Console.WriteLine($"[{i}]={c[i]}"); } } }

Exempel:

Ange tal på plats 0: 5 Ange tal på plats 1: 4 Ange tal på plats 2: 3 Min lista: [0]=10 [1]=11 [2]=12 [3]=13 [4]=14 [5]=5 [6]=4 [7]=3

Testa själv: https://repl.it/@johanbx/sweclockers-concat-list

Kod exempel med lista