0

こんにちは私はc#に不慣れで、コーディングしようとしていましたが、エラーが発生した場合、誰かがこれを手伝ってくれますか?

using System;
using System.Collections.Generic;
using System.Text;

namespace hodder
{
    class Program
    {
        public static void Main()
        {
            isHodder(3);
        }

        static int isHodder(int n)
        {
            int k = n;
            for (int i = 2; i <= n / 2;i++ )
            {
                if ((n % 1) == 0)
                {
                    return 0;
                }
                else
                {
                    for (int j = 2; j <= k;j++ )
                    {
                        if (n == (2^ j)  - 1)
                        {
                            return 1;
                        }
                        else
                        {
                            return 0;
                        }
                        k=(2^j)-1;
                    }
                }
            }
        }
    }
}

"static int isHodder(int n)"'hodder.Program.isHodder(int)'でエラーが発生する:すべてのコードパスが値を返すわけではありません

および「k=(2 ^ j)-1」で「到達不能コードが検出されました」

4

5 に答える 5

6

最初のエラー「すべてのコードパスが値を返すわけではない」は、値が返されない場所にコードがたどることができるパスがあることを意味します(つまり、isHodder(1)を呼び出します)。forループの外で値を返す必要があります。さらに、2番目のforループ内にif / elseブロックがあるため、行をループします

k=(2^j)-1;

実行されることはありません。

    static int isHodder(int n)
    {
        int k = n;
        for (int i = 2; i <= n / 2; i++)
        {
            if ((n % 1) == 0)
            {
                return 0;
            }
            else
            {
                for (int j = 2; j <= k; j++)
                {
                    if (n == (2 ^ j) - 1)
                    {
                        return 1;
                    }
                    else
                    {
                        return 0;
                    }
                    k = (2 ^ j) - 1;
                }
            }
        }
        return 0;
    }
于 2009-05-30T11:58:42.580 に答える
4

この行は非常に疑わしいです:

if ((n % 1) == 0)
于 2009-05-30T11:59:25.603 に答える
1

電話するとどうなりますisHodder(1)か?どのreturnステートメントに到達しますか?

forループに入ることがまったくない場合があります(または、forループに入ると、コンパイラは、ループを離れる前にreturnステートメントに到達したことを確認できません)。

于 2009-05-30T13:22:53.080 に答える
0

@jalf:2 <= n / 2(つまり、4 <= n)の場合については正しいです。その場合、forループに入ることがないため、の後に戻る必要がありますfor

@ケニーが示唆したように、

if ((n % 1) == 0)

疑わしいです。n%1は常に== nであるため、条件はn == 0の場合にのみ真になります。ただし、条件はループ内で変化するものをテストしないため、これはタイプミスのようにも見えます。もしかして

if ((n % i) == 0)

于 2009-05-30T14:04:08.503 に答える
0

この問題では、関数が値を返さなかった場合はvoidを使用する必要があります。それ以外の場合は、関数の最後に戻り値を定義する必要があります。

于 2013-04-04T11:28:51.740 に答える