Kezdőoldal » Számítástechnika » Programozás » Többdimenziós tömbből értékeke...

Norbi9701 kérdése:

Többdimenziós tömbből értékeket szeretnék beolvasni, de nem sikerül megoldanom, hogyan lehetne ezt megvalósítani? (többi lent)

Figyelt kérdés

ZH-n egy akasztófás játékot kellett csinálni, graphics osztállyal kellett kirajzolni, egy pontosvesszővel tagolt tömbből az értékeket, és nem sikerül az értékek megfelelő kiolvasása, egy 10 soros és 4 oszlopos mátrixba kellene beolvasnom az értéket, az elv meg is van, és működik is csak nem megfelelően


StreamReader sr = new StreamReader("akasztófa.csv");

while (!sr.EndOfStream)

{

for (int i = 0; i < 10; i++)


{

string sor = sr.ReadLine();

string[] seged = sor.Split(';');



for (int j = 0; j < 4; j++)

{


koordináták[i, j] = int.Parse(seged[j]);

}



}

}


itt lenne az a programkód rész, ami nem működik megfelelően, betettem egy breakpointot és néztem az értékeket, amiket beolvas, és az a baj hogy a sor változóból ugyanazokat az értékeket olvassa ki mindig, mivel amíg a for cikluson nem megy túl, addig nem ugrik vissza a while ciklusra és olvassa be a következő sort a tömbbe, már próbálgattam a ciklusokat máshogy egymásba ágyazni, de sehogyan sem akar sikerülni.


Amúgy itt a teljes kód:



class Akasztófa : PictureBox

{

private int _HibákSzáma;


public int HibákSzáma

{

get { return _HibákSzáma; }

set {

Rajzol();

_HibákSzáma = value; }

}


private int[,] koordináták = new int[10, 4];

public Akasztófa()

{

this.Height = 320;

this.Width = 320;

StreamReader sr = new StreamReader("akasztófa.csv");

while (!sr.EndOfStream)

{

for (int i = 0; i < 10; i++)


{

string sor = sr.ReadLine();

string[] seged = sor.Split(';');



for (int j = 0; j < 4; j++)

{


koordináták[i, j] = int.Parse(seged[j]);

}

}

}

sr.Close();

}

private void Rajzol()

{


Graphics g = this.CreateGraphics();

g.Clear(Akasztófa.DefaultBackColor);

Pen toll = new Pen(Color.Black, 1);

for (int i = 0; i < 10; i++)

{


if (i < HibákSzáma && i!= 5)

{

g.DrawLine(toll, koordináták[i, 0], koordináták[i, 1], koordináták[i,2], koordináták[i,3]);

}

else if (i==5)

{

g.DrawEllipse(toll, koordináták[i, 0], koordináták[i, 1], koordináták[i, 2], koordináták[i, 3]);

}


}


}

}



2017. dec. 8. 15:40
 1/3 anonim ***** válasza:

Elöljáróban jó tanácsok (tudom, hogy kezdő vagy, de épp azért írom):

1) Szokj rá az angol nevek használatára.

2) Nézz meg egy Microsoft ajánlást a névkonvenciókra

3) A fájl beolvasását rakd egy using blokkba:

using (var sr = new StreamReader("akasztofa.csv")) {

// Beolvasás

}

4) Fájlbeolvasást nem illik konstruktorban megírni

5) A "HibákSzáma" property-ben előbb írd meg az új értéket, és aztán rajzolj


Lássuk...


Túl sok a ciklusod. A külső while ciklust én így írnám meg:


string line;

int row = 0;

while ((line = sr.ReadLine()) != null) {

string rowData = line.Split(';');


for (var j = 0; j < 4; j++) {

coordinates[row, j] = int.Parse(rowData[j]);


}


row++;

}


Vagyis: Beolvasol egy új sort a while ciklus feltételében, és rögtön meg is nézed, hogy kaptál-e valamit. Ha null, amit kaptál, tutira elérted a fájl végét, nincs több dolgod. A while ciklus magjában a beolvasott sort ugyanúgy feldolgozod, mint eddig, majd a ciklus után eggyel növeled a 'row' változódat, ami az aktuális tömbre mutat.


Ezt a kódot még ki kell egészítened az alábbiak kezelésével:

1) Mi van, ha több, mint 10 sor van?

2) Mi van, ha kevesebb, mint 4 oszlop van egy sorban?

3) Mi van, ha egy cella értéke nem alakítható át integerre? (Mert üres, vagy az van benne, hogy 'okosmajom')

2017. dec. 8. 16:08
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:

Köszönöm szépen a segítséget! Igen még viszonylag kezdő vagyok 2-3 hónapos tudással, de az angolra való áttérést már elkezdtem csak itt elég sok minden meg volt adva, hogyan legyen elnevezve, és ha már a függvények magyarul vannak elnevezve, nem akartam keverni a nyelveket is, meg zh közben erre nem is annyira figyeltem, a konstruktorban való beolvasás pedig ugyancsak a feladatlapon volt. Igen a kivétel kezelés is hiányos, mivel adott volt a fájl, és ezért csak abból lévén a beolvasás nem igazán fordulhat elő más eset.


Itt a feladatsorról egy kép:

[link]


Esetleg ha érdekel

2017. dec. 8. 16:34
 3/3 anonim ***** válasza:

Kíváncsi voltam a feladatlapra, de a kepfeltoltes.hu fertőzött. Sajnos ismerem a helyzetet, hogy az iskolákban a programozás tanítás finoman szólva is hagy kívánni valókat maga után.


Persze, értem én, hogy az éremnek két oldala van: tudok sok olyan helyről, ahol nem tartozik a legfontosabb tárgyak közé a programozás, és csak a kreditekért mennek, ezért az oktatók a hallgatók számára a létező legegyszerűbben akarják megoldani a dolgot, csak nem feltétlen értek egyet vele.


Persze ha a vizsgán így kérik, akkor így kell csinálni... :/

2017. dec. 11. 08:42
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!