[ VLSE @ 10.12.2006. 11:32 ] @
Ja sam pocetnik u C#,radim po nekoj knjizi za pocetnike,ali sam naisao na kod koji nije dobro napisan,pa kada ga ja napisem nece da radi.Ko se malo bolje razume u C# lako ce proljuviti o cemu se radi.Naim e imam jednu biblioteki klase i klijentsku aplikaciju koja bi trebalo sa njom da sporeduje,ali to neradi.Molio bih iskusnije [programere koji ma je ovo boza da mi nadju gresku u kodu i pomognu.


Code:
using System;
namespace Ch10CardLib
{
    public enum Suit
    {
        Club,
        Diamond,
        Heart,
        Spade
    }
    public enum Rank
    {
        Ace=1,
        Deuce,
        Three,
        Four,
        Six,
        Seven,
        Eight,
        Nine,
        Ten,
        Jack,
        Queen,
        King
    }
    public class Card
    {
        public readonly Suit suit;
        public readonly Rank rank;
    }
    public override string ToString()
{
    return "The" +rank+ " of " +suit+ "s";
}
    private Card()
{
}
    public Card(Suit newSuit,Rank newRank)
{
    suit=newSuit;
    rank=newRank;
}
}using System;

namespace Ch10CardLib
{
    
    public class Deck
    {
        private Card[] cards;
        public Deck()
        {
            cards=new Card[52];
            for (int suitVal=0;suitVal<4;suitVal++)
            {
                for (int rankVal=1;rankVal<14;rankVal++)
                {
                    cards[suitVal*13+rankVal-1]=new Card[(Suit)suitVal,(Rank)rankVal];
                }
            }
        }
        public Card GetCard(int cardNum)
        {
            if (cardNum>=0&& cardNum<=51)
                return cards[cardNum];
            else
                throw (new System.ArgumentOutOfRangeException("cardNum",cardNum,"Value must be between 0 and 51."));
        }
        public void Shuffle()
        {
            Card[] newDeck=new Card[52];
            bool[] assigned=new bool[52];
            for (int i=0;i<52;i++)
            {
                int destCard=0;
                bool foundCard=false;
                Random sourceGen=new Random();
                while (foundCard==false)
                {
                    destCard=sourceGen.Next(52);
                    if (assigned[destCard]==false)
                        foundCard=true;
                }
                assigned[destCard]=true;
                newDeck[destCard]=cards[i];
            }
            cards=newDeck;
        }
    }
}using System;

namespace Ch10CardClient
{
    
    class Class1
    {
        
        static void Main(string[] args)
        {
            Deck myDeck=new Deck();
            myDeck.Shuffle();
            for (int i=0;i<52;i++)
            {
                Card tempCard=myDeck.GetCard(i);
                Console.WriteLine(tempCard.ToString());
                if (i !=51)
                    Console.Write(",");
                else
                    Console.WriteLine();
            }
            Console.ReadLine();
        }
    }
}


[Shadowed: dodati [code] tagovi.]

[Ovu poruku je menjao Shadowed dana 10.12.2006. u 13:35 GMT+1]
[ Dejan Vesic @ 10.12.2006. 12:50 ] @
Šta tačno "ne radi"?
[ dr.AgOlO @ 10.12.2006. 17:50 ] @
Code:

...
    public class Card
    {
        public readonly Suit suit;
        public readonly Rank rank;
    }
    public override string ToString()
   {
    return "The" +rank+ " of " +suit+ "s";
   }
    private Card()
  {
   }
    public Card(Suit newSuit,Rank newRank)
  {
    suit=newSuit;
    rank=newRank;
   }
...


Ne mozes da definises metode a naravno ni konstruktore van klase ... znaci treba da se ispravi kod iznad u

Code:

...
    public class Card
    {
        public readonly Suit suit;
        public readonly Rank rank;
        public override string ToString()
        {
           return "The" +rank+ " of " +suit+ "s";
        }
        private Card()
       {
       }
       public Card(Suit newSuit,Rank newRank)
      {
        suit=newSuit;
        rank=newRank;
      }
  }
...

[ VLSE @ 10.12.2006. 20:40 ] @
Hvala na odgovoru upravu ste za deo koda u biblioteci klase,ali mi i dalje pojavljuje greske u konzolnij aplikaciji koja koristi biblioteku tipa:

C:\BegCSharp\Chapter9\Ch10CardLib\Deck.cs(16): Cannot implicitly convert type 'Ch10CardLib.Suit' to 'int'
C:\BegCSharp\Chapter9\Ch10CardLib\Deck.cs(16): Cannot implicitly convert type 'Ch10CardLib.Rank' to 'int'
C:\BegCSharp\Chapter9\Ch10CardLib\Deck.cs(16): Cannot implicitly convert type 'Ch10CardLib.Card[*,*]' to 'Ch10CardLib.Card'
C:\BegCSharp\Chapter9\Ch10CardClient\Class1.cs(15): The type or namespace name 'Card' could not be found (are you missing a using directive or an assembly reference?)
C:\BegCSharp\Chapter9\Ch10CardClient\Class1.cs(16): The type or namespace name 'tempCard' could not be found (are you missing a using directive or an assembly reference?)
C:\BegCSharp\Chapter9\Ch10CardClient\Class1.cs(12): The type or namespace name 'myDeck' could not be found (are you missing a using directive or an assembly reference?)
C:\BegCSharp\Chapter9\Ch10CardClient\Class1.cs(11): The type or namespace name 'Deck' could not be found (are you missing a using directive or an assembly reference?)

Sto ih nevidi kada sam lepo stavio referencu na biblioteku bas kako je u knjizi!Ajde i ovo mi resite,to je za vas igracka.

[Shadowed: Uklonjeno sarenilo. Obrati paznju na pravilnik.]

[Ovu poruku je menjao Shadowed dana 11.12.2006. u 01:18 GMT+1]
[ Shevchenko @ 10.12.2006. 23:50 ] @
Pa kao prvo, ako si pocetnik u C#-u nisi pocetnik u kucanju. Sto je u ovom slucaju i tvoj ceo problem,elem, zameni ovo
Code:

public Deck()
        {
            cards = new Card[52];
            for (int suitVal = 0; suitVal < 4; suitVal++)
            {
                for (int rankVal = 1; rankVal < 14; rankVal++)
                {
                   cards[suitVal * 13 + rankVal - 1] = new Card[(Suit)suitVal, (Rank)rankVal];
                }
            }

sa ovim
Code:

public Deck()
        {
            cards = new Card[52];
            for (int suitVal = 0; suitVal < 4; suitVal++)
            {
                for (int rankVal = 1; rankVal < 14; rankVal++)
                {
                   cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal, (Rank)rankVal);
                }
            }

Razlika je u zagradama. U ti si pokusao da definises clan niza Card[], a ustvari je bilo potrebno instancirati klasu Card, pomocu Custom konstruktora "public Card(Suit newSuit, Rank newRank)"

A sto se tice gresaka u Deck.cs,pored reference dodaj i na pocetku klase "using Ch10CardClient" i sve ce ti raditi OK :)

P.S Drugi put dobro proveri kako si sta napisao, mozda je tebi svejedno ali compaileru nije ;)
[ Shevchenko @ 10.12.2006. 23:59 ] @
A mozes i ovako :
Code:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program                               //Program koji koristi dole navedene klase
    {
        static void Main(string[] args)
        {
            Deck myDeck = new Deck();
            myDeck.Shuffle();
            for (int i = 0; i < 52; i++)
            {
                Card tempCard = myDeck.GetCard(i);
                Console.WriteLine(tempCard.ToString());
                if (i != 51)
                    Console.Write(",");
                else
                    Console.WriteLine();
            }
            Console.ReadLine();
        }
    }
    public enum Suit                        //Enumerator znaka
    {
        Club,
        Diamond,
        Heart,
        Spade
    }
    public enum Rank                        //Enumerator karte
    {
        Ace=1,
        Deuce,
        Three,
        Four,
        Six,
        Seven,
        Eight,
        Nine,
        Ten,
        Jack,
        Queen,
        King
    }
    public class Card                       //klasa Karta
    {
        public readonly Suit suit;
        public readonly Rank rank;
        public override string ToString()
        {
            return "The" + rank + " of " + suit + "s";
        }
        private Card()   //konstruktor klase Karta
        {
        }
        public Card(Suit newSuit, Rank newRank) //Custom konstruktor klase Karta
        {
            suit = newSuit;
            rank = newRank;
        }
    }
    public class Deck                       //klasa Spil
    {
        private Card[] cards;
        public Deck()                       //konstruktor klase Spil
        {
            cards = new Card[52];
            for (int suitVal = 0; suitVal < 4; suitVal++)
            {
                for (int rankVal = 1; rankVal < 14; rankVal++)
                {
                    cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal, (Rank)rankVal);
                }
            }
        }
        public Card GetCard(int cardNum)               
        {
            if (cardNum >= 0 && cardNum <= 51)
                return cards[cardNum];
            else
                throw (new System.ArgumentOutOfRangeException("cardNum", cardNum, "Value must be between 0 and 51."));
        }
        public void Shuffle()                           //metod Mesanje
        {
            Card[] newDeck = new Card[52];
            bool[] assigned = new bool[52];
            for (int i = 0; i < 52; i++)
            {
                int destCard = 0;
                bool foundCard = false;
                Random sourceGen = new Random();
                while (foundCard == false)
                {
                    destCard = sourceGen.Next(52);
                    if (assigned[destCard] == false)
                        foundCard = true;
                }
                assigned[destCard] = true;
                newDeck[destCard] = cards[i];
            }
            cards = newDeck;
        }
    }

}


Sve ovo kopiraj u Program.cs i radice. Mada mnogo je bolje imati zasebne file-ove za svaku klasu :)
[ VLSE @ 11.12.2006. 16:04 ] @
Hvala batice u pravu si.Neznam kako to nisam video???Mada je tako napisano u knjizi,nema using Ch10CardLib .A ja sam jos uvekipocetnik.
Hvala Veliki Manitu.
Mada mi i dalje tekst ispisuje vertikalno,a ne po celoj sirini prozora komandnog promta,kako je u knjizi.To cu sam da prokljuvim.Kako covek da nauci kad ima gresaka i u ovim knjigama za pocetnike?
[ Shevchenko @ 11.12.2006. 21:33 ] @
Pa samo umesto
Code:

Console.WriteLine(tempCard.ToString());


napises

Code:

Console.Write(tempCard.ToString());


Savet : Nabavi drugu knjigu ;)
[ VLSE @ 12.12.2006. 15:34 ] @
Hvala ponovo.A sto se tice knjige mozda i nije losa"C# od pocetka-Karli Watson".Mozda je problem u tome sto bih ja hteo sve odmah da naucim,pa nesto i preskocim.
[ Danko_C @ 12.12.2006. 22:11 ] @
Huhhhh...... Nije to losa knjiga,mada.......

ja sam se pre par meseci malo zanimao sa njom i ....videces vec.....ima jos PUNO gresaka u kodovima,
i to ozbiljnijih.

Danko_C
[ VLSE @ 13.12.2006. 17:28 ] @
Slazem se da nije najbolja,ali je ovo Cet-ovo izdanje jedno od najboljih koje sam ja nasao na nasem jeziku.Verovatno ima boljih izdanja za pocetnike na engleskom.Mada sam mislio posto je to nova oblast za mene da bi bilo bolje da osnove steknem na iz nasih knjiga,pa cu posle lako kada sam vec u materiji usavrsavati se iz strane literature.Izgleda da sam se presao jer sam i ja poceo da primecujem krupne greske.Nekada sam zbog njih gubio dane da nesto skapiram posto je delovalo totalno nelogicno,da nisam mogao da nadjem smisao.Ako znas neku dobri knjigu za pocetnike,ti kazi da je nadjemo ili je posalji ako je imas u elektronskom formatu.CAO!
[ Danko_C @ 14.12.2006. 21:12 ] @
Pogledaj sledeće....

http://www.elitesecurity.org/p1203724


pa kreni......izbor je veliki. Ja bih ti lično preporučio knjige pod rednim
brojem 11. i 12.

Danko_C
[ Danko_C @ 14.12.2006. 21:14 ] @
A imas i na........

http://www.elitesecurity.org/p1277393