Jag sitter och pillar lite på en övningsuppgift jag fick av en god vän i Belgien som läser C# programmering.
Jag har två arrayer
static void ArrayExersis()
{
int[] a = new int[5] { 1, 3, 5, 7, 9 };
int[] b = new int[5] { 2, 4, 6, 8 };
for (int i = 0; i != a.Length; i++)
{
Console.WriteLine(a[i]);
}//end for
}//end ArrayExersis
Och vill få följande output
1
24
135
2468
13579
Hur ska jag lösa det? Förra övningen lyckades jag lösa som följer nedan men jag lyckas inte applicera den lösningen på denna alls.
Kan man göra nestlade loopar eller ska man styra det på något annat vis?
static void ArrayOvning1()
{
int[] a = new int[5] { 1, 2, 3, 4, 5 };
int[] b = new int[5] { 10, 20, 30, 40, 50 };
int[] c = new int[5] { 100, 200, 300, 400, 500 };
int[] d = new int[9];
//sets the value of the first 3 elements
d[0] = (a.Sum());
d[1] = (b.Sum());
d[2] = (c.Sum());
//sets the values of the 4th to the 8th element
for (int i = 0; i < a.Length; i++)
{
d[i + 3] += (a[i] + b[i] + c[i]);
}//end for
//sets the value of the 9th element
for (int i = 0; i != a.Length; i++)
{
d[8] += (a[i] * b[i] * c[i]);
}//end for
//write the numbers to console
for (int i = 0; i != d.Length; i++)
{
Console.WriteLine(d[i]);
}//end for
}
Jag ser inte varför du behöver nästlade loopar alls.
Loopa från i = 1 till 5.
Om i är udda läs ut i element ur udda-vektorn, om i är jämn läs ut i element ur jämn-vektorn.
Att kolla jämn/udda gör man förslagsvis med modulo-operatorn %
if ( (i%2)==1) // Udda tal
{
for (int k=0; k<i; k++)
{
Console.Write(a[k].ToString());
}
else // bör dom vara jämna :)
{
for (int k=0; k<i; k++)
{
Console.Write(b[k].ToString());
}
Console.Writeline("\n");
}
Och eftersom en lösning kom så kan jag väl visa min med då.
Jag använde också modulo för att avgöra vilken array man skulle skriva ut ifrån men jag körde in modulo-svaret direkt in i en tredje array som höll reda på a och b:
int[] a = new int[5] { 1, 3, 5, 7, 9 };
int[] b = new int[4] { 2, 4, 6, 8 };
int[][] numArray = new int[][] { a, b };
for (int i = 0; i != a.Length; i++)
{
for (int j = 0; j != i+1; j++)
{
Console.Write(numArray[i % 2][j]);
}
Console.Write('\n');
}//end for
tack allihop för svaren, det hade inte behövts hela lösningen jag ville egentligen bara veta det som Gein och sgtpepper skrev att man gör en tredje array som håller reda på vilken det är :)
Jag är dock lite nyfiken på koden
int[][] numArray = new int[][] { a, b };
om någon av er mästerkodare skulle kunna förklara den lite. Jag är med på int[] men att sedan lägga till [] direkt efter betyder det att numArray då kan ta 2st arrayer i sina 2 element?
Det trodde jag inte var möjligt :)
headbug: jag gjorde som du tidigare och det fungerar jättebra det också!
int[] är ju en array av integers. Då blir int[][] rimligtvis en array av int-arrayer :)
Den behöver inte nödvändigtvis ta bara 2 arrayer som i vårat fall utan du kan pilla in flera stycken om du så önskar.
red/ För att förtydliga hur du lägger in fler än två arrayer.
Alltså t.ex.
int[] a = new int[5] { 1, 3, 5, 7, 9 };
int[] b = new int[4] { 2, 4, 6, 8 };
int[] c = new int[3] { 4, 5, 6 };
int[][] numArray = new int[][] { a, b, c };
om någon av er mästerkodare skulle kunna förklara den lite. Jag är med på int[] men att sedan lägga till [] direkt efter betyder det att numArray då kan ta 2st arrayer i sina 2 element?
Det är helt enkelt en flerdimensionell array, istället för en dimension så har den två dimensioner. Du kan ha hur många dimensioner som helst i en array.
int[] one = new int[] { 1, 2, [b]3[/b] };
int[][] two = new int[] { one, [b]one[/b], one };
int[][][] three = new int[] { [b]two[/b], two, two};
three[0][1][2] == 1
251 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25