首页 > 解决方案 > 替换循环

问题描述

我正在尝试用 c 语言编写一个程序,没有任何决策语句循环,但我不知道如何摆脱 for 循环语句。

public int score()
{
    int scor = 0;
    int i=0;
    int type;
    for(int frameIndex=0; frameIndex < 10; frameIndex++)
    {
        type=Convert.ToInt32(isStrike(i));
        scor+=getStrikeCalculation(i)*type;
        i+=1*type;
        type=Convert.ToInt32(isSpare(i));
        scor+=getSpareCalculation(i)*type;
        i+=2*type;
        type=Convert.ToInt32(isNormal(i));
        scor += getNormalCalculation(i)*type;
        i+=2*type;
    }
    return scor;
}
private bool isNormal(int i)
{
    return rolls[i]+rolls[i+1]!=10 && rolls[i]!=10;
}
private bool isSpare(int i){
    return rolls[i] + rolls[i+1] == 10;
}
private bool isStrike(int i){
    return rolls[i] == 10;
}
private int getStrikeCalculation(int i){
    return rolls[i]+ rolls[i+1] + rolls[i+2];
}
private int getNormalCalculation(int i){
    return rolls[i]+rolls[i+1];
}
private int getSpareCalculation(int i){
    return rolls[i] + rolls[i + 1] + rolls[i + 2];
}

我试图让分数递归,但它没有用,递归我不知道如何停止函数,因为我不能使用 if 语句。

标签: c#

解决方案


你的循环只是做了十次。如果你不想循环,只需做十次:

int scor = 0;
int i=0;
int type;
int frameIndex=0;
type=Convert.ToInt32(isStrike(i));
scor+=getStrikeCalculation(i)*type;
i+=1*type;
type=Convert.ToInt32(isSpare(i));
scor+=getSpareCalculation(i)*type;
i+=2*type;
type=Convert.ToInt32(isNormal(i));
scor += getNormalCalculation(i)*type;
i+=2*type;
frameIndex += 1;
type=Convert.ToInt32(isStrike(i));
scor+=getStrikeCalculation(i)*type;
i+=1*type;
type=Convert.ToInt32(isSpare(i));
scor+=getSpareCalculation(i)*type;
i+=2*type;
type=Convert.ToInt32(isNormal(i));
scor += getNormalCalculation(i)*type;
i+=2*type;
frameIndex += 1;
type=Convert.ToInt32(isStrike(i));
scor+=getStrikeCalculation(i)*type;
i+=1*type;
type=Convert.ToInt32(isSpare(i));
scor+=getSpareCalculation(i)*type;
i+=2*type;
type=Convert.ToInt32(isNormal(i));
scor += getNormalCalculation(i)*type;
i+=2*type;
frameIndex += 1;
... and so on, seven more times.

你到底为什么要这样做,我无法理解;循环的目的是避免将代码写出十次。你为什么要做这种奇怪的事情?只写一个循环。


推荐阅读