Domanda

hi im nuovo C # e stava cercando di codice ma ottenere errore qualcuno mi può aiutare con questo che cosa sto facendo di sbagliato?

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;
                    }
                }
            }
        }
    }
}

im errore su come ottenere "static int isHodder (int n)" 'hodder.Program.isHodder (int)': non tutti i percorsi di codice restituiscono un valore

e "codice irraggiungibile rilevato" a "k = (2 ^ j) -1"

È stato utile?

Soluzione

Il primo errore, "non tutti i percorsi di codice restituiscono un valore" significa che c'è un percorso che il codice potrebbe seguire in cui nessun valore sarebbe tornato (es: chiamata isHodder (1)). Hai bisogno di tornare un valore al di fuori del ciclo for. Inoltre, dal momento che si dispone di un blocco if / else all'interno del secondo ciclo for la riga

k=(2^j)-1;

non verrà mai eseguita.

    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;
    }

Altri suggerimenti

Questa linea è altamente sospetto:

if ((n % 1) == 0)

Che cosa succede se io chiamo isHodder(1)? Quali tornare dichiarazione posso raggiungere?

Si può mai entrare il ciclo for a tutti (o se lo facciamo entrare, il compilatore non può essere sicuri che si raggiunge una dichiarazione di ritorno prima di lasciare il circuito).

@jalf: è corretto per il caso in cui 2 <= n / 2 (cioè, 4 <= n). Lei non potrà mai entrare nel ciclo per in questo caso, quindi è necessario il ritorno dopo la for.

Come suggerito @Kenny,

if ((n % 1) == 0)

è sospetto. n% 1 sempre == n, quindi la condizione sarà solo vero quando n == 0. Tuttavia, sembra anche questo potrebbe essere un errore di battitura, poiché la condizione non prova nulla che varia all'interno del ciclo. Cercavi

if ((n % i) == 0)

Per questo problema è necessario utilizzare nulla se la funzione non ha restituito alcun valore in caso contrario è necessario definire un valore di ritorno al termine della funzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top