Missa inte Amazon Prime Day i Dagens fynd
Permalänk
Avstängd

Tvådimensionell Vektor C#

Hej,

jag försöker köra detta nu:

int[,] m = new int[3, 4];
m[1, 2] = 14;
m[1, 3] = 15;
Console.WriteLine(m);

men detta utskrift kommer upp "System.Int32[,]"

Hur skriver jag detta egentligen?

Permalänk
Medlem
Skrivet av Daygamerme:

Hej,

jag försöker köra detta nu:

int[,] m = new int[3, 4];
m[1, 2] = 14;
m[1, 3] = 15;
Console.WriteLine(m);

men detta utskrift kommer upp "System.Int32[,]"

Hur skriver jag detta egentligen?

Variabeln m är just en 2-dimensionell array, vilket är vad konsollen skriver ut.
Om du vill skriva ut värdena behöver du istället gå igenom din array och skriva ut värdena var för sig.

Pröva loopen

foreach(var item in m)
{
Console.WriteLine(item.ToString());
}

som går igenom din array m, stoppar in värdena var för sig i variabeln item, och sedan skriver ut dem till konsollen.

Alternativt kan du köra

Console.WriteLine(m[1,2].ToString());

följt av

Console.WriteLine(m[1,3].ToString());

(.ToString() är nog valfritt i båda fallen, men det kan ju vara en bra vana att skriva ut text istället för tal till konsollen)

Permalänk
Avstängd
Skrivet av rarifag:

Variabeln m är just en 2-dimensionell array, vilket är vad konsollen skriver ut.
Om du vill skriva ut värdena behöver du istället gå igenom din array och skriva ut värdena var för sig.

Pröva loopen

foreach(var item in m)
{
Console.WriteLine(item.ToString());
}

som går igenom din array m, stoppar in värdena var för sig i variabeln item, och sedan skriver ut dem till konsollen.

Alternativt kan du köra

Console.WriteLine(m[1,2].ToString());

följt av

Console.WriteLine(m[1,3].ToString());

(.ToString() är nog valfritt i båda fallen, men det kan ju vara en bra vana att skriva ut text istället för tal till konsollen)

hej där,

jag lyckades lösa på egenhand och såhär blev det tillslut:

int[,] m = new int[3, 4];
m[1, 2] = 14;
m[1, 3] = 15;

Console.WriteLine(m[1, 2]);

det du skrev :

foreach(var item in m)
{
Console.WriteLine(item.ToString());
}

det var utmärkt

Jag ser nu att du la till tostring, jag undrar vad detta har för nytta i koden?

Permalänk
Medlem
Skrivet av Daygamerme:

hej där,

jag lyckades lösa på egenhand och såhär blev det tillslut:

int[,] m = new int[3, 4];
m[1, 2] = 14;
m[1, 3] = 15;

Console.WriteLine(m[1, 2]);

Jag ser nu att du la till tostring, jag undrar vad detta har för nytta i koden?

.ToString() är en funktion som tar ett tal, vilket innehållet i m är (du definierade den ju som int[,], alltså att det är heltal i den), och gör om det till en sträng, vilket är textformatet. Jag är inte särskilt insatt i hur C# funkar, eftersom jag inte programmerat i det på 6 år kanske, men tanken är att kunna skapa längre textsnuttar. T.ex

Console.WriteLine("Ditt värde är: " + m[1,2].ToString());

skriver ut "Ditt värde är: 14"

Om .ToString() inte används där (om inte C#/din kompilerare är supersnäll) så får du ett felmeddelande, eftersom det inte är möjligt att på ett vettigt sätt lägga ihop text med tal. Det är som att be någon säga vad 1 + hej är. Det går då att skriva ut lite vettigare meddelande för en själv över sin data. Pröva till exempel loopen

int i = 0; foreach(var item in m){ Console.WriteLine("m[" + (i / 4).ToString() + ", " + (i % 4).ToString() + "] = " + item.ToString()); i++; }

som gör utskriften mer läslig.

Permalänk
Avstängd
Skrivet av rarifag:

.ToString() är en funktion som tar ett tal, vilket innehållet i m är (du definierade den ju som int[,], alltså att det är heltal i den), och gör om det till en sträng, vilket är textformatet. Jag är inte särskilt insatt i hur C# funkar, eftersom jag inte programmerat i det på 6 år kanske, men tanken är att kunna skapa längre textsnuttar. T.ex

Console.WriteLine("Ditt värde är: " + m[1,2].ToString());

skriver ut "Ditt värde är: 14"

Om .ToString() inte används där (om inte C#/din kompilerare är supersnäll) så får du ett felmeddelande, eftersom det inte är möjligt att på ett vettigt sätt lägga ihop text med tal. Det är som att be någon säga vad 1 + hej är. Det går då att skriva ut lite vettigare meddelande för en själv över sin data. Pröva till exempel loopen

int i = 0; foreach(var item in m){ Console.WriteLine("m[" + (i / 4).ToString() + ", " + (i % 4).ToString() + "] = " + item.ToString()); i++; }

som gör utskriften mer läslig.

Hejsan, då förstår jag varför du använder ToString, vill tillägga att du har delvis rätt, tror du blandar ihop med annat programmeringsspråk. I C# ska Console.WriteLine(); alltid kunna skriva ut siffror, tror du syftar på int.TryParse(Console.ReadLine(), out int write);

Du blandar ihop inläsning med utskrivning. det är ReadLine som inte kan läsa siffror men utskrift writeLine kan alltid skrivas siffror

Permalänk
Medlem
Skrivet av Daygamerme:

Hejsan, då förstår jag varför du använder ToString, vill tillägga att du har delvis rätt, tror du blandar ihop med annat programmeringsspråk. I C# ska Console.WriteLine(); alltid kunna skriva ut siffror, tror du syftar på int.TryParse(Console.ReadLine(), out int write);

Att konsollen kan skriva ut tal på vettigt sätt är jag van vid, men jag var inte säker gällande C#. Nu förtiden programmerar jag endast i JavaScript, där behöver jag konvertera ett tal till en sträng via .toString() innan jag kan slå ihop det med en textsnutt. C# kanske automatiskt försöker konvertera tal till text när man försöker lägga ihop det med en annan sträng, i det fallet vore .ToString() överflödigt (i det här användningsområdet).

Permalänk
Avstängd
Skrivet av rarifag:

Att konsollen kan skriva ut tal på vettigt sätt är jag van vid, men jag var inte säker gällande C#. Nu förtiden programmerar jag endast i JavaScript, där behöver jag konvertera ett tal till en sträng via .toString() innan jag kan slå ihop det med en textsnutt. C# kanske automatiskt försöker konvertera tal till text när man försöker lägga ihop det med en annan sträng, i det fallet vore .ToString() överflödigt (i det här användningsområdet).

Jag har inte heller koll på det.

Men tack för hjälpen

Permalänk
Medlem
Skrivet av rarifag:

Att konsollen kan skriva ut tal på vettigt sätt är jag van vid, men jag var inte säker gällande C#. Nu förtiden programmerar jag endast i JavaScript, där behöver jag konvertera ett tal till en sträng via .toString() innan jag kan slå ihop det med en textsnutt. C# kanske automatiskt försöker konvertera tal till text när man försöker lägga ihop det med en annan sträng, i det fallet vore .ToString() överflödigt (i det här användningsområdet).

Skrivet av Daygamerme:

Jag har inte heller koll på det.

Men tack för hjälpen

När ett objekt sätts ihop med en sträng gör både C# och JavaScript (och Java för den delen) en automatisk konvertering till sträng genom att anropa metoden .toString() på objektet.

Snutten

var x = 42; var text = "the number is " + x;

ger alltså "the number is 42" i både C# och JavaScript.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

var x = 42; var text = "the number is " + x;

ger alltså "the number is 42" i både C# och JavaScript.

Notera att det spelar roll hur stringen sätts ihop i C# åtminstone, för du får olika resultat.

Exempelvis

int i = 10; string s = i + i + i;

Ger dig felet "Cannot implicity convert type 'int' to 'string', medans

int i = 10; string s = i + i + i + "";

Ger dig 30 istället för 101010, medans

int i = 10; string s = "" + i + i + i;

Ger dig 101010.

Permalänk
Medlem

Eftersom du, TS, jobbar i Console Application behöver du inte använda dig utav .ToString() när du ska skriva ut i konsollen. .ToString() kallas och gör om det du vill skriva ut till en string.

Men det kommer säkert hända att du kan behöva konvertera från int till string eller tvärtom (även nu när du ganska nyligen har börjat lära dig programmera).

TLDR: Vid användande av Console.WriteLine() callas .ToString() på objektet du försöker passa igenom.

Permalänk
Medlem
Skrivet av Tekoppar:

Notera att det spelar roll hur stringen sätts ihop i C# åtminstone, för du får olika resultat.

Exempelvis

int i = 10; string s = i + i + i;

Ger dig felet "Cannot implicity convert type 'int' to 'string', medans

int i = 10; string s = i + i + i + "";

Ger dig 30 istället för 101010, medans

int i = 10; string s = "" + i + i + i;

Ger dig 101010.

Det som spelar roll är reglerna för tolkningsordning, symbolprioritet och automatisk konvertering. i + i + i + "" blir "30" då kedjan tolkas från vänster till höger: 10 + 10 + 10 + "". Du kan få resultatet "101010" genom att tvinga tolkningsordningen i andra riktningen med i + (i + (i + "")), då parenteser tvingar ett uttryck att tolkas innan omkringliggande uttryck: i + "" konverteras automatiskt till i.ToString() + "". Hela uttrycket blir därmed i.ToString() + (i.ToString() + (i.ToString() + "")).

string s = i + i + i; är ett tilldelningsfel då automatisk konvertering är en dold effekt som sker vid sammansättning av objekt och strängar med +-symbolen.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Avstängd

Flerdimensionella vektorer C#

Hej,

hittills har jag lärt mig 2 dimensionella vektorer men det har inte funnits marginal i boken att visa fler exemplar, jag söker nu hur jag gör 3,4 eller fler dimensioner:

Exempel :

int[,] m = new int[3, 4];
m[2, 3] = 20;
m[2, 2] = 25;

Jag vill också skriva vad jag tror för att få respons på just det jag är ute efter anpassad efter mig:

Jag trodde att man fick ut fler dimensioner av att göra detta int[, ,] m = new int[3, 4 ,5];

Men detta funkar ej, hur gör man och vad gjorde jag för fel?

Permalänk
Medlem
Permalänk
Avstängd
Skrivet av Tea42BBS:

TTTThanks

string[,] array = new string[4,2] { { "Calliber", "Two arrays" }, { "Coltbolt", "extras" }, { "Clockwise", "lovemeloveyou" }, { "This time", "I am cool" } };

foreach(string item in array)
{
Console.WriteLine(item);
}