webForumDet fria alternativet

nestlade for satser i C#?

.NET

8 svar · 963 visningar · startad av CatZ

Medlem sedan jan. 20022 440 inlägg
Frågan#1

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  
}
Medlem sedan sep. 20005 700 inlägg
#2

Vill du ha en lösning rätt ut eller vägledning?

Medlem sedan sep. 2006867 inlägg
#3

/red Gein är bättre lärare än vad jag är :)

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");
}

Verkar det rimligt?

Medlem sedan sep. 20005 700 inlägg
#4

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
Medlem sedan sep. 2006867 inlägg
#5

Snyggt Gein!

Medlem sedan apr. 20007 588 inlägg
#6

Jäklar, jag var lite sen (och gjorde min i Java). Ganska identisk med Geins :)

public class Foo {

	public static void main(String[] args) {
		int[] a = { 1, 3, 5, 7, 9 };
		int[] b = { 2, 4, 6, 8 };
		int[][] c = { a, b };
		
		for(int y = 0; y < a.length; y++) {
			for(int x = 0; x <= y; x++) {
				System.out.print(c[(y % 2)][x]);
			}
			System.out.println();
		}
	}
}
Medlem sedan jan. 20022 440 inlägg
#7

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å!

Medlem sedan sep. 20005 700 inlägg
#8

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 };
Medlem sedan apr. 20007 588 inlägg
#9

CatZ skrev:

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 ä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
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)