3 svar
82 visningar
IsabelleB 2
Postad: 7 mar 2023 12:21 Redigerad: 7 mar 2023 16:39

Fel System.int32 & SorteraInfogande

Jag ska göra en uppgift där man på ett antal säljare ska kunna fylla i hur många artiklar som de har sålt och sedan ska de sorteras in i olika nivåer beroende på antalet och visas i ordning efter antalet sålda artiklar.

Så här ser min kod ut:

//Läsa namnkolumnen
string NA1 = tbxNamn1.Text;

string NA2 = tbxNamn2.Text;

string NA3 = tbxNamn3.Text;

string NA4 = tbxNamn4.Text;

 

//Läsa personnummer kolumnen
string PE1 = tbxPersonnummer1.Text;

string PE2 = tbxPersonnummer2.Text;

string PE3 = tbxPersonnummer3.Text;

string PE4 = tbxPersonnummer4.Text;

 

//Läsa distrikt
string DI1 = tbxDistrikt1.Text;

string DI2 = tbxDistrikt2.Text;

string DI3 = tbxDistrikt3.Text;

string DI4 = tbxDistrikt4.Text;

 

//Läsa sålda artiklar kolumnen
int[] SåldaArtiklar = new int[4];
SåldaArtiklar[0] = int.Parse(tbxSåldaArtiklar1.Text);
SåldaArtiklar[1] = int.Parse(tbxSåldaArtiklar2.Text);
SåldaArtiklar[2] = int.Parse(tbxSåldaArtiklar3.Text);
SåldaArtiklar[3] = int.Parse(tbxSåldaArtiklar4.Text);

 

int Nivå1 = 0;
int Nivå2 = 0;
int Nivå3 = 0;
int Nivå4 = 0;

 

//Spann på nivåer
if (SåldaArtiklar[0] < 50)
{
Nivå1 = 1;
}
else if (SåldaArtiklar[0] >= 50 && SåldaArtiklar[0] < 100)
{
Nivå1 = 2;
}
else if (SåldaArtiklar[0] >= 100 && SåldaArtiklar[0] < 200)
{
Nivå1 = 3;
}
else
{
Nivå1 = 4;
}

 

//Spann på nivåer
if (SåldaArtiklar[1] < 50)
{
Nivå2 = 1;
}
else if (SåldaArtiklar[1] >= 50 && SåldaArtiklar[1] < 100)
{
Nivå2 = 2;
}
else if (SåldaArtiklar[1] >= 100 && SåldaArtiklar[1] < 200)
{
Nivå2 = 3;
}
else
{
Nivå2 = 4;
}

 

//Spann på nivåer
if (SåldaArtiklar[2] < 50)
{
Nivå3 = 1;
}
else if (SåldaArtiklar[2] >= 50 && SåldaArtiklar[2] < 100)
{
Nivå3 = 2;
}
else if (SåldaArtiklar[2] >= 100 && SåldaArtiklar[2] < 200)
{
Nivå3 = 3;
}
else
{
Nivå3 = 4;
}

 

//Spann på nivåer
if (SåldaArtiklar[3] < 50)
{
Nivå4 = 1;
}
else if (SåldaArtiklar[3] >= 50 && SåldaArtiklar[3] < 100)
{
Nivå4 = 2;
}
else if (SåldaArtiklar[3] >= 100 && SåldaArtiklar[3] < 200)
{
Nivå4 = 3;
}
else
{
Nivå4 = 4;
}

SorteraInfogande(SåldaArtiklar);

tbxSåldaArtiklar1.Text = SåldaArtiklar[0].ToString();
tbxSåldaArtiklar2.Text = SåldaArtiklar[1].ToString();
tbxSåldaArtiklar3.Text = SåldaArtiklar[2].ToString();
tbxSåldaArtiklar4.Text = SåldaArtiklar[3].ToString();
}

public void SorteraInfogande(int[] lista)
{
int i, n;
int length = lista.Length; if (length < 2) return;
int temp;

for (n = 1; n < length; n++)
{
temp = lista[n];
i = n - 1;

while (i >= 0 && lista[i] > temp)
{
lista[i + 1] = lista[i];
i--;
}
lista[i + 1] = temp;
}
}

Min sortering verkar inte fungera för när jag ska visa resultatet så står det bara System.int32[]. Vad kan jag göra annorlunda? Jag får även problem när jag ska visa resultatet. Jag ska få varje nivå att stå i en egen kolumn samt få in en rad efter varje nivå som summerar hur många säljare som har nått en viss nivå.

Exempel:

Namn          Persnr             Distrikt     Antal
Sara            4503038990   Piteå         173
1 säljare har nått nivå 3: 100-199 artiklar

Peter           3502038964   Boden      202
Emma        7805055673    Luleå        203
2 säljare har nått nivå 4: över 199 artiklar

Jag funderar på om man kan använda AppendText men får inte rätt på det. Behöver man ha en egen label/textbox för att redovisa varje nivå eller kan man göra det i samma label/textbox? Hur får jag dem till att visas i sorterade ordningen i rutan?

anders_k Online 234
Postad: 7 mar 2023 21:14 Redigerad: 7 mar 2023 21:17

Jag tror du får det betydligt lättare om du buntade ihop all data som hör samman med en säljare in en klass. Låt oss kalla den SalesPerson

Också i SalesPerson bestämmer du nivå som säljaren hamnar. 1-4 m.h.a. av att kolla på hur mycket han sålt.

Sen loopar du igenom nivåerna 1 till 4
     Kolla i arrayen av Salesperson vem som har nivån, om samma, skriv ut personen.

Då får du det sorterat.

Visa spoiler
public class SalesPerson
{
  public string Namm{ get; set; }
  public string PersNummer{ get; set; }
  public string Distrikt{ get; set; }
  public int Sold{ get; set; }
  public int Niva()
  {
    if (Sold < 50)
    {
      return 1;
    }
    else if (Sold >= 50 && Sold < 100)
    {
      return 2;
    }
    else if (Sold >= 100 && Sold < 200)
    {
      return 3;
    }
    return 4;
  }
  public string ToString()
  {
    return $"{Name}  {PersNummer}  {Distrikt} {Sold}"; 
  }
}

 

IsabelleB 2
Postad: 15 mar 2023 11:38

Tack för svar!

Jag får inte rätt på att visa mina salespersoner som jag registrerar i listan i min textbox.
Om jag skriver .AppendText som nedan så blir det rött, men om jag bara skriver .Text så blir Salespeople.Add(sp); rött och skriver jag .Text = (sp).ToString(); så får jag bara med den senaste säljaren som jag registrerade och det går inte att lägga till AppendText framför (sp).ToString(); för då blir den raden röd..

Mitt program är väldigt långsamt, jag vet inte om det beror på att jag skrivit detta 2 gånger, men tar jag bort det översta så blir det en massa rött i det under.

När jag sedan ska sortera in i nivåer för att visa resultatet så får jag inte rätt på det.

Jag får inte rätt att sortera på nivå, så tänkte att jag kunde sortera på sålda artiklar.
Dock blir inte det som visas rätt, jag får bara med en säljares namn trots att jag skrivit in flera och satsen med hur många säljare som nått en nivå stämmer efter första raden men den ska komma efter att alla säljare har visats. Jag läste något i boken att man kan sätta in =-tecken som gör att textrutan inte uppdateras förrän loopen körts klart, men får inte rätt på att sätta in det i texten.

Så här ser mitt resultat ut trots att jag skrev Sara på den ena säljaren och att hon sålt 16 artiklar.

anders_k Online 234
Postad: 15 mar 2023 21:06 Redigerad: 15 mar 2023 21:08

Din Salesperon klass har den en ToString() metod för att skapa en sträng i lämpligt format? I så fall borde du kunna göra bara

tbxResult.AppendText( sp.ToString() );

AppendText är ingen property så att tilldela den blir fel, det är en metod.

Din Bubbelsortera() skall använda argumentet "lista" annars är det väl ingen mening att ha ett argument till funktionen?

Har du prövat att manuellt köra igenom din bubbelsortering på papper för att se att den fungerar? Speciellt kolla så alla i och j håller sig inom gränserna.

Svara Avbryt
Close