C# Programmering

C# Programmering

Har suttit oskäligt många timmar med detta nu och ska inte skriva vad jag tycker just nu.

Jag har gjort en vector där användaren fått i uppgift att skriva ut 10 heltal. Dessa heltal ska sedan skrivas ut. Jag ska nu lägga till en variabel av typen int med ett värde som jag väljer och jag har valt värdet 8. Skulle nu detta värde som jag valt ut bli detsamma som användaren fyllt i så ska detta omnämnas.

Min fråga är nu, hur gör jag. Jag har försökt mig på en if-sats som inte funkar. Jag vill att i mitt fall om det är rätt väg att gå att if-satsen ska gå igenom min Vektor/Array för att se efter om värdet 8 finns där för att således nämna detta. Känns som jag vänt och vridit på alla varianter så jag skickar nu ut min sista. Felet ligger i if-satsen, det är det enda jag vet.

namespace VektorMedTioPositioner
{
class Program
{
static void Main(string[] args)
{

int[] heltal = new int[10];
int tal1 = 8;

Console.WriteLine("Mata in 10 st heltal");

for (int i = 0; i < heltal.Length; i++)
{
int tal = int.Parse(Console.ReadLine());
heltal[i] = tal;
}

for (int i=0; i < heltal.Length; i++)
{
Console.WriteLine("index {0} har värdet {1}",i,+heltal[i]);
}

if (heltal.Length == tal1)
{
Console.WriteLine("Ett av dina heltal har värdet " +tal1);
}
else
{
Console.WriteLine();
}

Console.ReadKey();

Just nu kollar du om längden på din array där du matat in 10 tal är samma som ditt tal1 dvs om 10 är samma som 8. Det kommer det ju givetvis aldrig bli. Du vill ju kolla varje element i din array istället.

Skrivet av sbozic:

Har suttit oskäligt många timmar med detta nu och ska inte skriva vad jag tycker just nu.

Jag har gjort en vector där användaren fått i uppgift att skriva ut 10 heltal. Dessa heltal ska sedan skrivas ut. Jag ska nu lägga till en variabel av typen int med ett värde som jag väljer och jag har valt värdet 8. Skulle nu detta värde som jag valt ut bli detsamma som användaren fyllt i så ska detta omnämnas.

Min fråga är nu, hur gör jag. Jag har försökt mig på en if-sats som inte funkar. Jag vill att i mitt fall om det är rätt väg att gå att if-satsen ska gå igenom min Vektor/Array för att se efter om värdet 8 finns där för att således nämna detta. Känns som jag vänt och vridit på alla varianter så jag skickar nu ut min sista. Felet ligger i if-satsen, det är det enda jag vet.

namespace VektorMedTioPositioner
{
class Program
{
static void Main(string[] args)
{

int[] heltal = new int[10];
int tal1 = 8;

Console.WriteLine("Mata in 10 st heltal");

for (int i = 0; i < heltal.Length; i++)
{
int tal = int.Parse(Console.ReadLine());
heltal[i] = tal;
}

for (int i=0; i < heltal.Length; i++)
{
Console.WriteLine("index {0} har värdet {1}",i,+heltal[i]);
}

if (heltal.Length == tal1)
{
Console.WriteLine("Ett av dina heltal har värdet " +tal1);
}
else
{
Console.WriteLine();
}

Console.ReadKey();

Ja, du jämför ditt tal med längden av din array, som är 10, således kommer du aldrig in i if-satsen.

Om du vill jämföra med värdena i din array måste du iterera över den, med en for-loop

Skickades från m.sweclockers.com

Skrivet av jensa86:

Just nu kollar du om längden på din array där du matat in 10 tal är samma som ditt tal1 dvs om 10 är samma som 8. Det kommer det ju givetvis aldrig bli. Du vill ju kolla varje element i din array istället.

Precis, och jag har försökt med bara min vektor. if (heltal == tal1) men jag kan inte använda mig av tilldelningsoperatorn == får jag som felmeddelande.

Du måste loopa igenom heltal och kolla på varje plats om något är samma som tal1

Skrivet av sbozic:

Precis, och jag har försökt med bara min vektor. if (heltal == tal1) men jag kan inte använda mig av tilldelningsoperatorn == får jag som felmeddelande.

För du kan inte jämföra en int[] med en int.
Finns lite olika sätt att göra detta, men tänker att en loop är enklast att förstå i detta stadie. Du kan själv välja for eller en foreach.

FÖR VARJE tal i hetal
OM tal ÄR LIKA MED tal1
SKRIV UT ...
ANNARS SKRIV UT ...

Skickades från m.sweclockers.com

Om du kör med Visual Studio, debugga och sätt brytpunkter, steppa med F10 och kika på Local och Auto variabler så kan du bättre se varför saker och ting händer - och inte.

Som sagt, just nu jämför den här koden bara vektorns längd (10) med tal1 (8) och de kommer aldrig vara lika.

if (heltal.Length == tal1)

Istället kan du loopa igenom vektorn och se om heltal[i] == tal1, i stil med:

for (int i = 0; i < heltal.Length; i++) { if (heltal[i] == tal1) { //Skriv ut varning } }

Sen undrar jag om inte varningen bör komma direkt när användaren skriver in ett tal? Alltså:

for (int i = 0; i < heltal.Length; i++) { int tal = int.Parse(Console.ReadLine()); OM heltal redan innehåller tal Skriv ut varning ANNARS heltal[i] = tal; }

Skrivet av zaibuf:

För du kan inte jämföra en int[] med en int.
Finns lite olika sätt att göra detta, men tänker att en loop är enklast att förstå i detta stadie. Du kan själv välja for eller en foreach.

FÖR VARJE tal i hetal
OM tal ÄR LIKA MED tal1
SKRIV UT ...
ANNARS SKRIV UT ...

Skickades från m.sweclockers.com

Hej! jag har också sett när jag fått ett felmeddelande att man inte kan jämföra int med en int[]. Men nu med hjälp av er här så har jag lyckats lösa mitt problem med en formel som Oh Gesus delat med sig. I if-satsen så jämförs just en intVektor med en int, hur är det möjligt?

for (int i = 0; i < heltal.Length; i++)
{
if (heltal[i] == tal1)

{
Console.WriteLine("\nEtt av dina heltal har värdet " + tal1+"\n");
}

Skrivet av Oh Geesus:

Som sagt, just nu jämför den här koden bara vektorns längd (10) med tal1 (8) och de kommer aldrig vara lika.

if (heltal.Length == tal1)

Istället kan du loopa igenom vektorn och se om heltal[i] == tal1, i stil med:

for (int i = 0; i < heltal.Length; i++) { if (heltal[i] == tal1) { //Skriv ut varning } }

Sen undrar jag om inte varningen bör komma direkt när användaren skriver in ett tal? Alltså:

for (int i = 0; i < heltal.Length; i++) { int tal = int.Parse(Console.ReadLine()); OM heltal redan innehåller tal Skriv ut varning ANNARS heltal[i] = tal; }

Hej! Tack för att du tagit dig tid, din formel med hjälp av vad de andra skrivit har hjälpt mig lösa mitt problem. Men som jag skrev till någon annan här i tråden så är jag konfundersam över hur man i en if-sats kan jämföra en int med en int[] för när jag försökte gör det utanför en for-loop så fick jag hela tiden felmeddelande att det inte var möjligt?

Skrivet av sbozic:

I if-satsen så jämförs just en intVektor med en int, hur är det möjligt?

heltal[i] innebär att du plockar ut ett specifikt element i vektorn, i det här fallet elementet på position i.

D.v.s. om du har t.ex.:

int arr[] = {1, 2, 3, 4, 5};

så är arr av typen int[5], men t.ex. arr[2] är av typen int och har värdet 3 (eftersom indexeringen börjar på 0).

Tänk på vad som finns i dina behållare. En int är ETT tal. En inte[] har många tal.

Skriv nu {8,4,3,9,2} == 4 t.ex. Det är samma som inte[] == int.
Om du istället skriver inte[1] så menar du position två (börjar räkna på noll), Eva int[1] == int blir 4 == 4 vilket blir sant.

Hoppas det klarnar lite?

Skickades från m.sweclockers.com

Skrivet av sbozic:

Hej! jag har också sett när jag fått ett felmeddelande att man inte kan jämföra int med en int[]. Men nu med hjälp av er här så har jag lyckats lösa mitt problem med en formel som Oh Gesus delat med sig. I if-satsen så jämförs just en intVektor med en int, hur är det möjligt?

for (int i = 0; i < heltal.Length; i++)
{
if (heltal[i] == tal1)

{
Console.WriteLine("\nEtt av dina heltal har värdet " + tal1+"\n");
}

heltal[i] kommer att returera den inten som ligger i respektive index vid iterationen i loopen. Då du loopar hela längden på arrayen så kommer den jämföra varje tal.

var arr = new int[] { 1, 4, 8 }; arr[0] kommer att ge dig int 1. arr[1] kommer att ge dig int 4. arr[2] kommer att ge dig int 8.

En for loop byter ut variabeln i mot heltalet i loopen och adderar med 1 för varje varv.
Så alltså heltal[i] kommer att vara heltal[0], heltal[1] osv, tills att i motsvarar längden på din array, då är den klar och avslutar loopen.

Du kan även skriva foreach om det känns mer logiskt att läsa.

foreach(int tal in heltal) { if(tal == tal1) // gör nåt else // gör något annat }

Skickades från m.sweclockers.com

Senast redigerat 2019-12-08 08:32
Skrivet av talonmas:

Tänk på vad som finns i dina behållare. En int är ETT tal. En inte[] har många tal.

Skriv nu {8,4,3,9,2} == 4 t.ex. Det är samma som inte[] == int.
Om du istället skriver inte[1] så menar du position två (börjar räkna på noll), Eva int[1] == int blir 4 == 4 vilket blir sant.

Hoppas det klarnar lite?

Skickades från m.sweclockers.com

I kombination med vad alla andra skrivit så är jag lite lite klokare. Tack för att du tagit dig tid till att ge din förklaring.

Skrivet av zaibuf:

heltal[i] kommer att returera den inten som ligger i respektive index vid iterationen i loopen. Då du loopar hela längden på arrayen så kommer den jämföra varje tal.

var arr = new int[] { 1, 4, 8 }; arr[0] kommer att ge dig int 1. arr[1] kommer att ge dig int 4. arr[2] kommer att ge dig int 8.

En for loop byter ut variabeln i mot heltalet i loopen och adderar med 1 för varje varv.
Så alltså heltal[i] kommer att vara heltal[0], heltal[1] osv, tills att i motsvarar längden på din array, då är den klar och avslutar loopen.

Du kan även skriva foreach om det känns mer logiskt att läsa.

foreach(int tal in heltal) { if(tal == tal1) // gör nåt else // gör något annat }

Skickades från m.sweclockers.com

Tack för du tagit dig tid till att svara. Jag tror jag börjar förstå sammanhanget. Som du skriver så gör for-loopen min vektor/array till enskilda heltal som jämförs mot min variabel och om då villkoret stämmer så skrivs mitt meddelande ut.