我为我的游戏创建了这个应该读取字符串的功能,例如" 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;
}
}
我对两件事感兴趣:
答案 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;
}