为什么错误丢失返回陈述? (在java中)而不是在c ++中

时间:2016-12-18 14:43:54

标签: java c++ function loops

我为我的游戏创建了这个应该读取字符串的功能,例如" 3 Spade"并返回其价值(这个例子值得3分)。

问题是我收到此错误:no return statement found

虽然当我编写完全相同的C ++代码时,它运行时没有任何错误(我来自C ++背景)

Java代码:

public static int getCardValue(String card)
{
    for(int s=0; s != cardSuits.length; s++) //cardSuits is an array of strings 
        for(int r=0; r != cardRanks.length; r++)//cardRanks is an array of strings 
        {
            String GeneratedCard = cardRanks[r] + " " + cardSuits[s];
            if((GeneratedCard).equals(card))
                {
                    if(r >= 0 && r <= 8) //number in array starts from 0(2) to 8(10)
                    {
                        return r;
                    }
                    else if( r >= 8 && r <= 12) //from 8(10) to 11(KING)
                    {
                        return 10;
                    }
                }
            else
             return -1;
        }
}

完全相同的C ++代码(在此帖子的特定情况下经过测试和验证)

int Game::func(std::string card)
{
    for (int s = 0; s != 3; s++) //cardSuits is an array of strings 
        for (int r = 0; r != 13; r++)//cardRanks is an array of strings 
        {
            std::string GeneratedCard = cardRanks[r] + " " + cardSuits[s];
            if (GeneratedCard==card)
            {
                if (r >= 0 && r <= 8) //number in array starts from 0(2) to 8(10)
                {
                    return r;
                }
                else if (r >= 8 && r <= 12) //from 8(10) to 11(KING)
                {
                    return 10;
                }
            }
            else
                return -1;
        }
}

我对两件事感兴趣:

  1. 知道java代码的工作版本
  2. 为什么c ++和java代码之间存在这种差异

2 个答案:

答案 0 :(得分:1)

1- JAVA getCardValue方法是一个返回类型函数所以你应该处理每种情况下的返回值,即使它是FOR LOOP函数,因为它取决于条件

public static int getCardValue(String card) {
    for (int s = 0; s != cardSuits.length; s++){
        for (int r = 0; r != cardRanks.length; r++) {
            String GeneratedCard = cardRanks[r] + " " + cardSuits[s];
            if ((GeneratedCard).equals(card)) {
                if (r >= 0 && r <= 8)
                    return r;// handling if condition
                else if (r >= 8 && r <= 12)
                    return 10;// returning value else if condition
            }else{
                return 0;// returning value else condition
            }
        }
    }
    return 0;// returning value FOR loop condition
}

2-我认为你应该将这些返回值放在C ++函数中,因为它是一个返回类型函数

答案 1 :(得分:1)

基本上,Java会通过你的if,else-if和else语句,并确保方法总是返回一个值。
所以你的代码看起来像这样

if A
  if B
    return
  else if C
     return
else
  return

因此,Java可以看到,如果您的状态是A而不是B而不是C,则存在不返回值的逻辑路径。

您可以通过在方法末尾添加默认返回来解决此问题。 或者,如果您认为它是一个无法到达的状态,则可以抛出异常,因为只有很多卡。

public static int getCardValue(String card)
{
  for (int s = 0; s != cardSuits.length; s++)
    // cardSuits is an array of strings
    for (int r = 0; r != cardRanks.length; r++)// cardRanks is an array of
                                               // strings
    {
      String GeneratedCard = cardRanks[r] + " " + cardSuits[s];
      if ((GeneratedCard).equals(card))
      {
        if (r >= 0 && r <= 8) // number in array starts from 0(2) to 8(10)
        {
          return r;
        }
        else if (r >= 8 && r <= 12) // from 8(10) to 11(KING)
        {
          return 10;
        }
      }
      else
        return -1;
    }
  return -1;
}