Vinnaren i pepparkakshustävlingen!
2018-02-07, 20:50
  #3277
Medlem
Citat:
Ursprungligen postat av tj.
Jag tror du har tänkt lite fel här. En temperatur är ju kopplad till en stad, så varför ska du spara dessa värden i separata listor? Det gör din lösning överdrivet komplicerad och att försöka sätta ihop dem i efterhand kommer bli svårt om du inte ha id:n att joina på. Varför inte ha ett lämpligt objekt som kan hålla i alla värden?
Kod:
public class Temperature
{
    public 
string CityName getset; }
    
    public 
int TemperatureInCelsius getset; }


Jag har gjort om koden lite grann om du kolla ovanstående post, däremot så vet jag inte riktigt hur jag ska göra för att kunna få fram svaren i någon loop. (användaren ska kunna se alla städer och temperaturer även medeltemperaturen, kunna kontrollera temperaturer i alla städer, dock är fokus just nu att kunna visa städer och temperaturer för användaren)
Citera
2018-02-07, 21:02
  #3278
Medlem
tj.s avatar
Citat:
Ursprungligen postat av intrig
Jag har gjort om koden lite grann om du kolla ovanstående post, däremot så vet jag inte riktigt hur jag ska göra för att kunna få fram svaren i någon loop. (användaren ska kunna se alla städer och temperaturer även medeltemperaturen, kunna kontrollera temperaturer i alla städer, dock är fokus just nu att kunna visa städer och temperaturer för användaren)
Kod:
case "C":
case 
"c":
    
Console.Clear();
    for (
int i 0cityList.Counti++)
    {
        
Console.WriteLine(cityList[i]);
        
Console.WriteLine(i);
    } 
Här måste du antingen överlagra City-klassens ToString()-metod (vilket jag dock antar att ni inte har kommit in på än) eller specificera vilka properties du vill printa ut.
Kod:
Console.WriteLine(cityList[i].City ": " cityList[i].Temperature); 
Vad är det annars som inte fungerar i din nuvarande lösning?

F. ö. är publika fields bad practice, och properties, klasser och funktionsnamn ska börja med versal.
Citera
2018-02-07, 21:12
  #3279
Medlem
Citat:
Ursprungligen postat av tj.
Kod:
case "C":
case 
"c":
    
Console.Clear();
    for (
int i 0cityList.Counti++)
    {
        
Console.WriteLine(cityList[i]);
        
Console.WriteLine(i);
    } 
Här måste du antingen överlagra City-klassens ToString()-metod (vilket jag dock antar att ni inte har kommit in på än) eller specificera vilka properties du vill printa ut.
Kod:
Console.WriteLine(cityList[i].City ": " cityList[i].Temperature); 
Vad är det annars som inte fungerar i din nuvarande lösning?

F. ö. är publika fields bad practice, och properties, klasser och funktionsnamn ska börja med versal.

Den första lösningen som du visade skrev ut projektets namn och sedan 0. (har inte gått igenom toString som du sa.

Den andra lösningen visade felet nedantill och ett likadant fast för City


Severity Code Description Project File Line Suppression State
Error CS1061 'City' does not contain a definition for 'Temperature' and no extension method 'Temperature' accepting a first argument of type 'City' could be found (are you missing a using directive or an assembly reference?) testarKlaerr C:\Users\Bassa\source\repos\testarKlaerr\testarKla err\Program.cs 45 Active

Som sagt, huvudproblemet just nu är att jag inte kan visa det användaren skriver in i case 1, och skriva ut allting i case 2 (loop)
Citera
2018-02-07, 21:22
  #3280
Medlem
Citat:
Ursprungligen postat av intrig
Den första lösningen som du visade skrev ut projektets namn och sedan 0. (har inte gått igenom toString som du sa.

Den andra lösningen visade felet nedantill och ett likadant fast för City


Severity Code Description Project File Line Suppression State
Error CS1061 'City' does not contain a definition for 'Temperature' and no extension method 'Temperature' accepting a first argument of type 'City' could be found (are you missing a using directive or an assembly reference?) testarKlaerr C:\Users\Bassa\source\repos\testarKlaerr\testarKla err\Program.cs 45 Active

Som sagt, huvudproblemet just nu är att jag inte kan visa det användaren skriver in i case 1, och skriva ut allting i case 2 (loop)

Det felet säger är att objectet inte har någon variabel som heter City eller Temperature, i din kod som du visade förut har du det, men de är stavade med gemener.


Den första koden i tj's svar skulle ifall du inte överlagrat ToString, skriva ut vad för object det är, vet inte vart projektets namn kommer ifrån?
Citera
2018-02-07, 21:46
  #3281
Medlem
Citat:
Ursprungligen postat av Gottisborgen
Det felet säger är att objectet inte har någon variabel som heter City eller Temperature, i din kod som du visade förut har du det, men de är stavade med gemener.


Den första koden i tj's svar skulle ifall du inte överlagrat ToString, skriva ut vad för object det är, vet inte vart projektets namn kommer ifrån?

Nej, det spelade ingen roll, testade utan ToString också, det som skrivs ut är namespace och därefter 0.
Citera
2018-02-07, 22:09
  #3282
Medlem
tj.s avatar
Citat:
Ursprungligen postat av intrig
Nej, det spelade ingen roll, testade utan ToString också, det som skrivs ut är namespace och därefter 0.
Den översta koden i mitt senaste inlägg är den koden du hade skrivit och som du inte ska använda. Du måste specificera vilka properties i ditt objekt som du vill skriva ut, vilket jag gav exempel på. Anledningen till varför du får kompileringsfel beror på att du i ditt fall har skrivit fälten i lowerCase medan jag skrev dem i UpperCase. Det är skillnad på int temperature och int Temperature. De kommer tolkas som två helt olika variabler.
Citera
2018-02-08, 08:51
  #3283
Medlem
Citat:
Ursprungligen postat av tj.
Den översta koden i mitt senaste inlägg är den koden du hade skrivit och som du inte ska använda. Du måste specificera vilka properties i ditt objekt som du vill skriva ut, vilket jag gav exempel på. Anledningen till varför du får kompileringsfel beror på att du i ditt fall har skrivit fälten i lowerCase medan jag skrev dem i UpperCase. Det är skillnad på int temperature och int Temperature. De kommer tolkas som två helt olika variabler.

Okej, jag ändrade City och Temperature i loopen till lowecases och nu fungerar det, tack!
Citera
2018-04-14, 12:20
  #3284
Medlem
Ninjors avatar
Nu är jag lite snurrig här...

Kod:
private int number;
public int Number { get; set; }

Detta ger en varning om att fältet inte används. Som jag har förstått det skapar kompilatorn ett fält automatiskt (när get set används), därför blir "number" överflödig. Är detta korrekt?

Men vad ska jag då skriva för att få en korrekt inkapsling?

Kod:
private int number;
public int Number { get; private set; }

public ClassName //Konstruktor
{
this.Number = number;
}

Ovanstående kod har jag kört med hela tiden och helt enkelt struntat i varningarna. Det kompileras dock fint när jag tar bort fältet... varför? Kompilatorn borde väl då inte förstå vad "number" betyder?
__________________
Senast redigerad av Ninjor 2018-04-14 kl. 12:24.
Citera
2018-04-14, 12:36
  #3285
Medlem
tj.s avatar
Citat:
Ursprungligen postat av Ninjor
Nu är jag lite snurrig här...

Kod:
private int number;
public int Number { get; set; }

Detta ger en varning om att fältet inte används. Som jag har förstått det skapar kompilatorn ett fält automatiskt (när get set används), därför blir "number" överflödig. Är detta korrekt?

Men vad ska jag då skriva för att få en korrekt inkapsling?

Kod:
private int number;
public int Number { get; private set; }

public ClassName //Konstruktor
{
this.Number = number;
}

Ovanstående kod har jag kört med hela tiden och helt enkelt struntat i varningarna. Det kompileras dock fint när jag tar bort fältet... varför? Kompilatorn borde väl då inte förstå vad "number" betyder?
Du tänker lite fel här. Du använder en autoproperty samtidigt som du har deklarerat ett field. Du ska använda antingen eller.
Kod:
// kapsla in ett field i en property
private int _number;
public 
int Number 
{
    
get { return _number; }
    
set _number value; }
}

// använder autoproperty utan field
public int Number getset; } 
Grundregeln är enkel. Vill du kapsla in logik i din property, använd det första exemplet. Om du bara vill tilldela eller hämta ett värde upp och ner, använd en autoproperty.
Citera
2018-04-16, 12:15
  #3286
Medlem
Håller på med ett litet projekt, där jag jobbar på en enkel sökfunktion.
Har skapat en strängvektor i min lista, men får ett felmeddelande där det står:
Operator '==' cannot be applied to operands of type 'string[]' and 'string'


Kod:
List<string[]> myList= new List<string[]>();

Här är raden som menar att något är fel.
Kod:
string keyword = Console.ReadLine();    
           for (int i = 0; i < myList.Count; i++){
                if (myList[i] == sökord)             
                       Console.WriteLine("Results: " + myList[i]);
          }
}
Hur skulle jag kunna åtgärda detta?
Om jag inte använder mig av strängvektorer utan bara strängar i min lista försvinner felet.
Citera
2018-04-16, 13:07
  #3287
Medlem
Ninjors avatar
Byt ut till:

if (myList[i].Contains(keyword))
{
...
}
Citera
2018-04-16, 13:15
  #3288
Medlem
Citat:
Ursprungligen postat av Ninjor
Byt ut till:

if (myList[i].Contains(keyword))
{
...
}
Får ytterligare ett felmeddelande då:
'string[]' does not contain a definition for 'Contains' and no extension method 'Contains' accepting a first argument of type 'string[]' could be found (are you missing a using directive or an assembly reference?)

Kan det vara någon annanstans det är något knasigt i koden?
Citera

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