Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2016-01-22, 22:23
  #1
Medlem
Bennybandits avatar
Tja har precis börjar programmering 1 och fastnar ganska omgående. Hjälp uppskattas.
Fastnade på den första av tre frågor som hänger ihop, skriver ut alla tre för den som orkar hjälpa.
Men mest akut är det med den första frågan. BILD http://imgur.com/4Qu9NvZ

Fråga 1. (kontrollera värdet del1) lyder: Skapa ett program som ställer frågan "Är det fint väder?". Om användaren svarar "j" skriver programmet ut "Vi går på picknick!" Annars händer ingenting.


Console.Write("Är det fint väder?: ");
string str = Console.ReadLine();
int weather = Convert.ToInt32(str);

if (weather == j)

{
Console.WriteLine("Vi går på picknick!!");
}

Får felmeddelandet "Use of unassigned local variable 'j'" Eller "The name 'j' does not exist in the current context"
Om jag sätter in siffran '100'"från ett snarlikt exempel och utgår från den (handlar om temperatur)
och sätter in if (weather ==100), då jävlar kan den säga att vi går på picknick om svaret är '100', men inte om jag byter ut det mot ett 'j'. Wtf?

Såg nu också att om jag använder valfri siffra så händer inget, precis som det ska vara. Om jag skriver valfri bokstav så kraschar programmet. Antar att hela koden måste skrivas om och att den saknar viktiga delar osv.



Varför funkar det med '100' och inte 'j'? Varför är inte '100' "Unassigned" eller "does not exist in current context" Ändrar ju bara den lilla detaljen.


För den som orkar kan ju hjälpa mig med de två följdfrågorna.

Fråga 2. (kontrollera värdet del2) Lyder: Arbeta vidare med övning 1 men lägg till att användaren kan svara "n". Då skriver programmet ut "Vi stannar inne och läser en bok". Det ska inte spela någon roll om användaren matar in liten eller stor bokstav.


Fråga 3. (kontrollera värdet del3) Lyder; Arbeta vidare med fråga 1&2. Gör så att om användaren matar in något annat än "j", "J", "n" eller "N", så skriver programmet ut "Jag förstår inte"

Jag vet att jag är kass, det är första veckan med detta och ursäkta röran.
Tacksam för hjälp!
__________________
Senast redigerad av Bennybandit 2016-01-22 kl. 22:28.
Citera
2016-01-22, 22:27
  #2
Medlem
EckiEckis avatar
Citat:
Ursprungligen postat av Bennybandit


Om jag sätter in siffran '100'"från ett snarlikt exempel och utgår från den (handlar om temperatur)
och sätter in if (weather ==100), då jävlar kan den säga att vi går på picknick om svaret är '100', men inte om jag byter ut det mot ett 'j'. Wtf?

Läs på om skillnaderna mellan variabler innehållande heltal (j) eller strängar ("j")
Citera
2016-01-23, 00:21
  #3
Medlem
Citat:
Ursprungligen postat av Bennybandit
Kod:
Console.Write("Är det fint väder?: ");
// Du deklarerar variabeln str av typen string.
string str = Console.ReadLine();  
// Du försöker konvertera värdet av variabeln str till integer.
int weather = Convert.ToInt32(str);

//Du jämför värdet av variabeln weather med VARIABELN j, som inte finns.
if (weather == j)
{
    Console.WriteLine("Vi går på picknick!!");
}
Får felmeddelandet "Use of unassigned local variable 'j'" Eller "The name 'j' does not exist in the current context"
Det är för att kompilatorn tolkar j som ett variabelnamn och du har ingen variabel som heter j. Du måste deklarera variabeln j och tilldela den ett värde för att göra den jämförelsen. Var det en sträng du syftade på måste du omsluta den av citat: weather == "j".
Citat:
Ursprungligen postat av Bennybandit
Om jag sätter in siffran '100'"från...
100 är inte ett giltigt variabelnamn och tolkas heller inte som det. Det tolkas som en integer och jämförelsen är giltig, så länge weather är av typen int.

Citat:
Ursprungligen postat av Bennybandit
Såg nu också att om jag använder valfri siffra så händer inget, precis som det ska vara. Om jag skriver valfri bokstav så kraschar programmet.
Det är för att Convert.ToInt32(str) försöker att konvertera en bokstav (ej 0-9) till en int, misslyckas med det och kastar FormatException.


Citat:
Ursprungligen postat av Bennybandit
Fråga 2. (kontrollera värdet del2) Lyder: Arbeta vidare med övning 1 men lägg till att användaren kan svara "n". Då skriver programmet ut "Vi stannar inne och läser en bok". Det ska inte spela någon roll om användaren matar in liten eller stor bokstav.
Eftersom det är en första grundkurs kan du fortsätta med if/else-sats. Istället för jämförelse med == så skulle jag rekommendera equals-metoden på strängobjektet.
Det blir alltså:
Kod:
string strA = "hello";
string strB = "HeLLo";

if(strA.equals(strB, StringComparison.OrdinalIgnoreCase)) {
  Console.WriteLine("strA är lika som strB, om vi får ignorera Case.
}
Citat:
Ursprungligen postat av Bennybandit
Fråga 3. (kontrollera värdet del3) Lyder; Arbeta vidare med fråga 1&2. Gör så att om användaren matar in något annat än "j", "J", "n" eller "N", så skriver programmet ut "Jag förstår inte"
Det är inte svårare än att avsluta din if-else-sats:
Kod:
if(a == b) {

} else if(a == c) {

} else {
 Console.Write("Hepp, inget av det.");
}
Citera
2016-01-24, 04:08
  #4
Medlem
Bennybandits avatar
Okej, tack så mycket för svaren.
Ska försöka jobba ikapp imorgon med det som vara gjort den här veckan och se om det går bättre, får läsa lite mer i boken samt läsa det ni skrivit, läggdags nu. Spännande med programmering, lite klurigt i början men jag antar att det kommer gå bättre och bättre.
Citera
2016-01-24, 12:17
  #5
Avstängd
Det fungerar såhär: (Varning, koden nedan är inte korrekt, den har endast skrivits för att du ska förstå hur det fungerar.)

if(weather == 100){
messageBox.Show("Vi går på picknick och röker brajj");
}

Om du istället byter ut "100" mot "j", som följande:

if(weather = j) {
messageBox.Show("Vi går på picknick och röker brajj");
}

Så SKA du få fel. Varför? För att du har aldrig talat om vad j är för något. För att det ska fungera, så lär du göra någonting som följande:

int j = 100;
Citera
2016-01-24, 20:12
  #6
Medlem
Bennybandits avatar
Hmm...kommer ingen vart även om jag får allt förklarat för mig, skulle behöva se koden på fråga 1 (även 2 & 3 för den som orkar). Läser i boken, läser era svar, försöker men blir ingen skillnad, allt går åt helvete ändå. Behöver se den färdiga koden framför mig för att koppla ihop vad som menas.

Behöver få koden skriven, kopiera in i programmet och se att den fungerar, så kan jag studera hur och varför för att försöka gå vidare i boken.

Någon som orkar skriva klart den där? Använd gärna write, writeline, readline, if, convert och de basic raderna som behövs och har med dem att göra, har inte hunnit gå igenom andra metoder ännu.

Frågan igen: Skapa ett program som ställer frågan "Är det fint väder?". Om användaren svarar "j" skriver programmet ut "Vi går på picknick!" Annars händer ingenting.


{
Console.Write("Är det fint väder?: ");
string str = Console.ReadLine();


{
Console.WriteLine("Vi går på picknick!");
}

Stor tack till den som orkar skriva ihop den färdiga koden.
Trögfattad
Citera
2016-01-24, 22:23
  #7
Medlem
Finkelstruts avatar
Hejsan.

Du vill jämföra den sträng användaren skriver in mot ett satt värde, "j".

För det första vill du ju spara det användaren skriver så du kan jämföra det med något.

Då deklarerar du en variabel av typen string (string till text, int till siffror är en bra början att tänka på)

Kod:
1. Att Deklarera variabeln (skapa en variabel):
string str;

2. Att deklarera och tilldela variabeln ett värde
string str;
str = Console.Readline();
Lägg märke här till att jag bara behöver skriva str på denna raden då den redan är deklarerad. Jämför med hur du använt j i din egen kod, något j finns inte och därför får du ett error.
Kod:
3. Att deklarera, tilldela värde till flera variabler.

string userInput = Console.Readline();
string greeting = "Hi, BennyBandit!";

Console.Write(userInput ); //skriver ut värdet i variabeln userInput (det användaren skrev in i detta fallet)

Console.Write(greeting); //skriver ut värdet i variabeln greeting ( det värde vi tilldelade variabeln)

Console.Write(j); //j existerar ej och du får därför error.

Hoppas du ser varför du ej kunde använda j i din egen kod.

Men som vi ser i exemplet tilldelar du en string värde med citattecken, exempelvis
string greeting = "Hi, BennyBandit!"

Du kan då också göra en jämförelse med en variabel av typen string genom att kolla den mot ett värde inom citattecken (en string helt enkelt).

Kod:
string str = "This is a string";

if(str == "This is a string")
{
 //Console.Write("Yes, the value stored in your variable is: This is a string");
}

Hoppas dessa exempel ska visa dig hur du gör för att lösa din uppgift!
Citera
2016-01-25, 10:10
  #8
Avstängd
Citat:
Ursprungligen postat av Bennybandit
Varför funkar det med '100' och inte 'j'? Varför är inte '100' "Unassigned" eller "does not exist in current context" Ändrar ju bara den lilla detaljen.
Om du anger endast "j" utan citattecken så anger du att j är en variabel. För att j ska fungera så måste du ange vad j är. Om det är en siffra, så är det en "int". Är det en bokstav, ett ord eller en mening så är det en "string". Då måste du ange följande:

string j = "Flashback";

eller

int j = 1;

variabel namn = värde

Det fetmarkerade == variabelns TYP, t.ex. int eller string (finns många fler olika variabler också).

Det understrukna == variablens NAMN, helt valfritt men får INTE redan existera. (T.ex. "bajspåse", "negerdildo", "draktunga" osv.)

Värdet == Vad variabeln ska göra, vad den ska betyda.

Om du anger att if(bajs == "100") { så har du där hittat på ett värde som inte kräver något mer för att fungera. Men tänk om du ska använda exakt detta tal eller ord på flera ställen? Då kan det vara bättre att göra en variabel som innehåller talet eller meningen och sedan kan du ange variabeln istället för talet.

Istället för att skriva "laughing out loud" om och om igen, så kan du ange en string som automatiskt betyder "laughing out loud", t.ex: string lol = "laughing out loud";. Då anger du bara "lol" på valfritt ställe och så står det per automatik "laughing out loud".

När du kallar på en variabel så ska du INTE ange citattecken runt det. Om du ska hitta på ett ord / skriva det manuellt så MÅSTE du ha citattecken.


Citat:
string j = "Picknick";

Console.WriteLine("Picknick123123");

Det ovan kommer skriva ut "Picknick123123".

Citat:
string j = "Picknick";

Console.WriteLine(j);

Det ovan kommer skriva ut "Picknick".

Jag gjorde ett program som gör allt som du ber om, och inkluderade källkoden i både programmet och nedanför. http://puu.sh/mISdb/5fe0083b79.png

Ladda ned programmet här:

Källkod:
Kod:
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "j")
            {
                MessageBox.Show("Vi går på picknick!!");
            }
            else if (textBox1.Text == "J")
            {
                MessageBox.Show("Vi går på picknick!!");
            }
            else if (textBox1.Text == "n")
            {
                MessageBox.Show("Vi stannar inne och läser en bok");
            }
            else if (textBox1.Text == "N")
            {
                MessageBox.Show("Vi stannar inne och läser en bok");
            }
            else if (checkBox1.Checked == true)
            {
                MessageBox.Show(textBox1.Text);
            }
            else
            {
                MessageBox.Show("Jag förstår inte.");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
        }
    }
}
Citera
2016-01-25, 10:59
  #9
Medlem
Har inte visual studio, så kan finnas formatteringsfel och annat, men det skiiter jag i nu.

Kod:
//Fråga till användaren
Console.Write("Är det fint väder?: ");
//Då input är i string, så behöver den inte parsas
string answer = Console.ReadLine();

//Tar svaret till upper, dvs "j" --> "J", "J" --> "J"
if (answer.ToUpper() == "J")

{
Console.WriteLine("Vi går på picknick!!");
}
if (answer.ToUpper() == "N")
{
Console.WriteLine("Vi stannar inne");
}
else
{
Console.WriteLine("Jag förstår inte");
}
Citera
2016-01-25, 18:16
  #10
Medlem
Bennybandits avatar
Citat:
Ursprungligen postat av Mikeisch
Har inte visual studio, så kan finnas formatteringsfel och annat, men det skiiter jag i nu.

Kod:
//Fråga till användaren
Console.Write("Är det fint väder?: ");
//Då input är i string, så behöver den inte parsas
string answer = Console.ReadLine();

//Tar svaret till upper, dvs "j" --> "J", "J" --> "J"
if (answer.ToUpper() == "J")

{
Console.WriteLine("Vi går på picknick!!");
}
if (answer.ToUpper() == "N")
{
Console.WriteLine("Vi stannar inne");
}
else
{
Console.WriteLine("Jag förstår inte");
}

Tack för hjälpen alla, kände att Mikeisch's kod var enklast att hänga med i då den var som det vi hunnit gå igenom. Verkade dock vara något litet fel då den både ville gå på picknick och inte förstod på "j" medan den var helt med på att vi skulle stanna inne om "n". Försökte göra om lite men kunde inte göra så mycket bättre än att man var tvungen att trycka enter två gånger efter "j" för att den bara ville gå på picknick, medan det räckte med ett tryck på enter efter "n"-svaret. Hur/varför förstår jag inte.

Efter att ha fått ett hum om vad jag sysslade med där så fastnade jag givetvis på frågan efter...märkligt hur man ska hinna med om varje fråga tar ett par dagar med internet-hjälp, svårt med distanskurs och mailkontakt med lärare (som är dålig på att svara). Märkligt upplägg, behöver ju någon bredvid som kan visa och göra så man förstår allt och hänger med.

För den som orkar visa denna. Koden är given, ska bara knappa in koden efter if (...), else if (...) och else (...).
Övning 7.3.5 - Var är det kallast?
-Skapa ett program som jämför temperaturen mellan Östersund, Åmål och Arboga. Programmet ska berätta var det är kallast. Du kommer att behöva använda OCH-operatorn &&. Utgå från följande kod och ersätt "..." med kod:

Det är jag som försökt skriva in kod efter if, if else och else. Hittar inte någon hemsida och inte i boken mer exakt hur man gör just detta, bara snarlika, så chansade lite och felmeddelandena bara sprutar fram.

{
Console.Write("Ange temperatur för Östersund: ");
int ostersund = Convert.ToInt32(Console.ReadLine());
Console.Write("Ange temperatur för Åmål: ");
int amal = Convert.ToInt32(Console.ReadLine());
Console.Write("Ange temperatur för Arboga ");
int arboga = Convert.ToInt32(Console.ReadLine());

if (amal >ostersund && arboga >ostersund);
{
Console.WriteLine("Det är kallast i Östersund ");
}

else if (ostersund >amal && arboga >amal);
{
Console.WriteLine("Det är kallast i Åmål ");
}

else (amal >arboga && ostersund >arboga);

{
Console.WriteLine("Det är kallast i Arboga ");
}
}

}
}

Citera
2016-01-25, 19:14
  #11
Medlem
Bennybandits avatar
Testade igen och det kändes lite mer rätt efter googlingar.

if (ostersund < amal && ostersund < arboga);
{
Console.WriteLine("Det är kallast i Östersund ");
}

else if (amal < ostersund && amal < arboga);

{
Console.WriteLine("Det är kallast i Åmål ");
}

else (arboga < ostersund && arboga < ostersund);

{
Console.WriteLine("Det är kallast i Arboga ");
}

Nu finns invalid expression på else if och else...varför går inte else if och else in? Har kollat videoklipp och surfat runt lite...
Citera
2016-01-25, 20:19
  #12
Medlem
Finkelstruts avatar
Syntaxfel! Du ska inte stänga if-satsen med ;
Samma gäller else if.

else ska heller inte innehålla något påstående som ger true/false. Else är bara ANNARS.

I en if-sats skriver du ett påstående som antingen är TRUE eller FALSE.

Kod:
if(true)
{
Console.Write("Denna kod körs då påstående är TRUE!");
}
------------
if(10 > 1)
{
Console.Write("Detta körs också, då påståendet 10 är större än 1 är TRUE!");
}

Kod:

if(1 > 2) //avsluta inte med ; här.
{
//Påståendet är FALSE då 1 inte är större än 2.
//Koden innanför dessa brackets körs alltså inte.
//Den går istället vidare till nästa påstående nedan:
}
else if(1 > 3)
{
//Påståendet är false då 1 inte är större än 3.
//Koden här körs inte.
//Den går istället vidare till vår ELSE
//Else innehåller inget eget påstående
}
else
{
//Denna kod körs om ingen av de tidigare påstående är TRUE.
}
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback