IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Martin Pola
Člen
Avatar
Martin Pola:29.11.2015 19:11

Ahoj, byl bych moc rád za každou pomoc s následujícím problémem...
Kód:

class Field
   {
       private bool? player;
       private int fieldvalue;
       public Field() : this(null, 0) { }
       public Field(bool? Player, int FieldValue)
       {
           this.Player = Player;
           this.FieldValue = FieldValue;
       }
       public bool? Player
       {
           get { return player; }
           set { this.player = value; }
       }
       public int FieldValue
       {
           get { return fieldvalue; }
           set { this.fieldvalue = value; }
       }
   }
   class GameBoard
   {
       private const int gameboardsize = 10;
       Field[,] SomeField = new Field[gameboardsize, gameboardsize];
       public void FirstLoad()
       {
           if (SomeField[5, 5].FieldValue != null)
               MessageBox.Show("The gameboard is not equals to null");
       }
   }

a vyskočí mi chyba: viz obrázek

Potřeboval bych zkontrolovat, jestli je dané políčko v poli prázdné nebo ne...

Předem děkuji za pomoc...

Odpovědět
29.11.2015 19:11
Per Aspera Ad Astra
Avatar
Gramli
Tvůrce
Avatar
Odpovídá na Martin Pola
Gramli:29.11.2015 19:36

Fieldvalue nemáš nullable - > int? -> jinak pokud uděláš objekt nullable má pak propertu HasValue. A taky je určité ta třída na indexu [5,5] inicializovana?

Editováno 29.11.2015 19:38
Nahoru Odpovědět
29.11.2015 19:36
Kdo to říká ten to je...
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na Martin Pola
Ondřej Štorc:29.11.2015 19:46

A máš vůbec to pole inicializované?

Nahoru Odpovědět
29.11.2015 19:46
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Martin Pola
Petr Čech:29.11.2015 20:22

U nullovatelných vlastností se neptáš

Property!=null

ale

Property.HasValue

a pokud ano, tak

Property.Value
Nahoru Odpovědět
29.11.2015 20:22
the cake is a lie
Avatar
Odpovídá na Martin Pola
Neaktivní uživatel:29.11.2015 20:52

Zkus elvisa:

// ...
if (SomeField[5, 5]?.FieldValue != null)
// ...
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.11.2015 20:52
Neaktivní uživatelský účet
Avatar
Odpovídá na Petr Čech
Neaktivní uživatel:29.11.2015 20:56

U nullovatelnych se muzes ptát taky

Property!=null

Stejně tak můžeš použít i jiné operátory, např:

int? karel;
bool ctibor;

karel = 0;
ctibor = karel > 0; // false

karel = null;
ctibor = karel > 0; // false

karel = 42;
ctibor = karel > 0; // true
Nahoru Odpovědět
29.11.2015 20:56
Neaktivní uživatelský účet
Avatar
Milan Křepelka
Tvůrce
Avatar
Milan Křepelka:30.11.2015 8:03

Operátory jsou jenom zástupné řešení. Řešení tohoto problému bude spíše s otázce :Proč si vybíráš data z pole do kterého sis nic nedal, že?

 
Nahoru Odpovědět
30.11.2015 8:03
Avatar
Martin Pola
Člen
Avatar
Martin Pola:30.11.2015 9:20

Chci v pokračování kódu zjišťovat, jestli dané pole patří 1. hráči, 2. hráči, nebo jestli je prázdné... Napadlo mě, že nejjednodušší bude "nullable bool", který má hodnoty "null!, "true", "false"... Jestli pro to máte nějaký lepší návrh, prosím, budu moc rád, když mi poradíte... Nejsem zkušený programátor... ;-)

Nahoru Odpovědět
30.11.2015 9:20
Per Aspera Ad Astra
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na Martin Pola
Milan Křepelka:30.11.2015 12:50

Tak jinak. Komentáře v kódu

public class OneMineField
    {
        public int PositionX { get; private set; }
        public int PositionY { get; private set; }

        public bool HasMine { get; set; }
        public OneMineField(int PositionX, int PositionY)
        {
            this.PositionX = PositionX;
            this.PositionY = PositionY;
        }
    }

    public class Board
    {
        const int sizeX = 5;
        const int sizeY = 5;

        OneMineField[,] fields = new OneMineField[sizeX, sizeY];

        public Board()
        {

            fields = new OneMineField[sizeX, sizeY];
            // tady oneField je null, protože to pole není naplňené
            var oneField = fields[3, 3];

            /*nezapoměl si 'náhodou' na tuto část ?*/
            for (int counterSizeX = 0; counterSizeX < sizeX; counterSizeX++)
                for (int counterSizeY = 0; counterSizeY < sizeY; counterSizeY++)
                {
                    fields[counterSizeX, counterSizeY] = new OneMineField(counterSizeX, counterSizeY);
                }

            //a tady už je všechno v pořádku
            oneField = fields[3, 3];
        }
    }
 
Nahoru Odpovědět
30.11.2015 12:50
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.