为什么获取错误时缺少返回状态?(java)而不是c++;

为什么获取错误时缺少返回状态?(java)而不是c++;,java,c++,function,loops,Java,C++,Function,Loops,我已经为我的游戏创建了这个函数,它应该读取一个字符串,比如“3黑桃”,并返回它的值(这个例子它值3分) 问题是我得到了这个错误:没有找到返回语句 虽然我写的C++代码完全相同,但C++运行时没有任何错误(我来自C++背景) Java代码: public static int getCardValue(String card) { for(int s=0; s != cardSuits.length; s++) //cardSuits is an array of strings

我已经为我的游戏创建了这个函数,它应该读取一个字符串,比如“3黑桃”,并返回它的值(这个例子它值3分)

问题是我得到了这个错误:
没有找到返回语句

<>虽然我写的C++代码完全相同,但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;
        }
}
public static int getCardValue(字符串卡)
{
for(int s=0;s!=cardSuits.length;s++)//cardSuits是一个字符串数组
for(int r=0;r!=cardRanks.length;r++)//cardRanks是一个字符串数组
{
字符串GeneratedCard=cardRanks[r]+“”+cardSuits[s];
如果((生成卡片).等于(卡片))
{

如果(r>=0&&r=8&&r=0&&r=8&&r1-JAVA getCardValue方法是一个返回类型函数,因此您应该在每种情况下处理返回值,即使它是FOR循环函数,因为它取决于条件

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
}
public static int getCardValue(字符串卡){
对于(int s=0;s!=cardSuits.length;s++){
for(int r=0;r!=cardRanks.length;r++){
字符串GeneratedCard=cardRanks[r]+“”+cardSuits[s];
如果((生成卡片).等于(卡片)){

if(r>=0&&r=8&&r基本上,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;
}
public static int getCardValue(字符串卡)
{
对于(int s=0;s!=cardSuits.length;s++)
//cardSuits是一个字符串数组
for(int r=0;r!=cardRanks.length;r++)//cardRanks是
//弦
{
字符串GeneratedCard=cardRanks[r]+“”+cardSuits[s];
如果((生成卡片).等于(卡片))
{

如果(R>=0 & & r=8 & &)因为java不是C++,C++不是java.如果CasSuth.Stand=0,编译器就不会找到返回的SATION。现在你的问题太宽和/或不清楚了。如果<代码> CuxToass<代码>是空的,你会返回什么?如果< Cord> Cordrangs是空的,你会返回什么?如果<代码>,你会返回什么?等于(卡片)< /C> >总是正确的,但是内部<代码>如果语句总是错误的?在C++中,它不“只返回0而不是抱怨”。不应该依赖于任何特定的事件。java做分支分析C++不这样做,C++函数没有返回语句。它的返回值是未定义的,除非它是主函数,在这种情况下它返回0。
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;
}