| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 869 人关注过本帖
标题:c#入门经典 扑克牌程序中的一个问题
只看楼主 加入收藏
萍民
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-8-19
收藏
 问题点数:0 回复次数:2 
c#入门经典 扑克牌程序中的一个问题
各位大神,目前刚自学c#,但是在第十章扑克牌程序卡住了,遇到了个问题,如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace Ch10CardLib
{
    public enum Suit
    {
        Club,
        Diamond,
        Heart,
        Spade,
    }
    public enum Rank
    {
        Ace = 1,
        Deuce,
        Three,
        Four,
        Five,
        Six,
        Seven,
        Eight,
        Nine,
        Ten,
        Jack,
        Queen,
        King,
    }
    public class Card
    {
        public readonly Suit suit;
        public readonly Rank rank;
        public  Card(Suit newSuit,Rank newRank)
        {
            this.suit = newSuit;
            this.rank = newRank;
        }
        private Card() { }
        public override string ToString()
        {
            return "The " + rank + " of " + suit + "s";
        }
    }
  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);
        }
      }
    }
    [color=#FF0000]public Card GetCard(int cardNum)
    {
      if (cardNum >= 0 && cardNum <= 51)
        return cards[cardNum ];
      else
        throw (new System.ArgumentOutOfRangeException("cardNum", cardNum, "数字在0-51间"));
    }[/color]
    public void Shuffle()
    {
      Card[] newDeck = new Card[52];
      bool[] assigned=new bool[52];
      Random sourceGen = new Random();
      for (int i = 0; i < 52; i++)
      {
        int destCard = 0;
        bool foundCard = false;
        while (foundCard == false)
        {
          destCard = sourceGen.Next(52);
          if (assigned[destCard] == false)
            foundCard = true;
        }
        assigned[destCard] = true;
        newDeck[destCard] = cards[i];
      }
      newDeck.CopyTo(cards ,0);
    }
  }
}
创建GetCard方法时,VS2010显示错误“.Deck.GetCard(int)”: 并非所有的代码路径都返回值,求解,输入几次都显示这种错误?
搜索更多相关主题的帖子: public 扑克牌 经典 
2013-10-03 14:51
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
这种错误提示经常出现在需要返回值而没有返回的时候。例如
程序代码:
int func()
{
    if (a!=0)
        return 10;
    else
        throw(...);
}

因为函数要求返回值,而当程序运行到else段的时候(也即a==0成立时),只是抛出异常而没有返回值。
解决方法就是在子程序末加个return -1;来表示运行失败。

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2013-10-04 21:19
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
改变一下策略,这样处理即可:
public Card GetCard(int cardNum)
{
      if (cardNum >= 0 && cardNum <= 51)
      {
         return cards[cardNum];
      }
      else
      {
         return null;
      }
}
调用的时候判断一下
try
{
    Card card=GetCard(52);
    if(card!=null)
    {
       ........
    }
    else
    {
       throw (new System.ArgumentOutOfRangeException("cardNum", cardNum, "数字在0-51间"));
    }
}
catch(Exception ex)
{
   loggerHelper.WriteLog(ex);//自定义函数,将异常信息写入日志。
}
这是一种最好的处理方式,对异常要进行捕获并且将异常信息写入日志,以便调试的时候查看。

♂ 死后定当长眠,生前何须久睡。♀
2013-10-05 09:36
快速回复:c#入门经典 扑克牌程序中的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052975 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved