Cannot implicitly convert type 'void' to 'int' nasıl çözülür.
64x64

Halil

11.05.2016 00:00:00

Merhaba. C# dilini yeni öğreniyorum ve basit şeyler deniyorum. Ancak ''result = searchocc'' kısmında sorun çıktı ve ne yaptıysam çözemedim. Çözümünde yardımcı olursanız sevinirim.

Cannot implicitly convert type 'void' to 'int'          Line 105, Column 22   

namespace ConsoleApplication1
{
    class Program
    {
        static void minsumavg (int N, float []X, ref float min, ref float sum, ref float avg)
        {
            int i;
            min = X[0];
            for (i = 0; i < N; i++)
                if (X[i] < min) min = X[i];
            sum = 0;
            for (i = 0; i < N; i++)
                sum = sum + X[i];
            avg = sum / N;
        }
        static void maxavg (int N, float []X, ref float max, ref float avg)
        {
            int i;
            float sum;
            max = X[0];
            for (i = 0; i < N; i++)
                if (X[i] > max) max = X[i];
            sum = 0;
            for (i = 0; i < N; i++)
                sum = sum + X[i];
            avg = sum / N;
        }
        static void sortmax (int N, ref float []X, ref float max)
        {
            int i, j, pass;
            float tmp;
                for (pass = 1; pass < N; pass++)
                    for (j = 0; j < N-pass ; j++)
                        if (X[j] > X[j + 1]) 
                        {
                            tmp = X[j];
                            X[j] = X[j + 1];
                            X[j + 1] = tmp;
                        }
            max = 0;
            for (i = 0; i < N; i++)
                if (X[i] > max) max = X[i];
        }
        static void searchocc (int N, float []X, float y, ref int found, ref int occ)
        {
            int i;
            found = 0;
            for (i = 0; i < N; i++)
                if (X[i] == y) found = 1;
            occ = 0;
            for (i = 0; i < N; i++)
                if (X[i] == y) occ++;
        }
        static void save (int N, float []X)
        {
            int i;
            StreamWriter F = new StreamWriter("f://Data.txt");
            for (i = 0; i < N; i++)
                F.WriteLine(X[i]);
            F.Close();
        }
        static void load (int N, ref float []X)
        {
            int i;
            StreamReader F = new StreamReader("f://Data.txt");
            for (i = 0; i < N; i++)
                X[i] = float.Parse(Console.ReadLine());
            F.Close();
        }
        static void Main ()
        {
            float[] X;
            int i, N;
            float sum, avg, min, max;
            float y;
            int result, found, occ;
            N = int.Parse(Console.ReadLine());
            X = new float[N];
            for (i = 0; i < N; i++)
                X[i] = 0;
            load(N, ref X);
            for (i = 0; i < N; i++)
                Console.WriteLine(X[i]);
            min = X[0];
            max = X[0];
            sum = 0;
            avg = sum / N;
            minsumavg(N, X, ref min, ref sum, ref avg);
            Console.WriteLine("minimum=" + min);
            maxavg(N, X, ref max, ref avg);
            Console.WriteLine("maximum=" + max);
            Console.WriteLine("avg=" + avg);
            sortmax(N, ref X, ref max);
            for (i = 0; i < N; i++)
                Console.WriteLine(X[i] + " ");
            y = float.Parse(Console.ReadLine());
            result = 0;
            result = searchocc(N, X, y, ref found, ref occ);
            if (result == 0) Console.WriteLine("Not Found");
            else Console.WriteLine("Found");
                Console.ReadKey();
        }
    }
}

 

64x64

Muhammet Ali

12 Mayıs 2016 Perşembe

Merhabalar

Kodunu inceledim.Hata aldığın kısımda sanırım burası

result = searchocc(N, X, y, ref found, ref occ);

Öncelikle Main kısmındaki tanımladığın result değeri int tipinde.tanımladığın searchocc adındaki fonkisyon void tipinde bir fonksiyon void tipindeki fonksiyonlar ise değer dondurmezler.sen methotdan bir değer dondurup result değerine atmak istemişsin bu yüzden o satırda hata almaktasın.Normal void siz fonksiyon kullanman gerekli bu şekilde return ile fonksiyondan çıkan sonucu döndürüp int tipindeki result değerine eşitleyebilirsin.

 

64x64

Muhammet Ali

12 Mayıs 2016 Perşembe

yada şu şekide de yapabilirsin aşağıdaki senin kodun.

result = 0;
            result = searchocc(N, X, y, ref found, ref occ);
            if (result == 0) Console.WriteLine("Not Found");
            else Console.WriteLine("Found");
                Console.ReadKey();

burada methoda parametrelerini gönderip daha sonra result değerine atıp result değerinin olup olmamasını kontrol etmek istemişsin.Bu şekilde ypmak istiyorsan ilk yöntem çözecektir işini.Diğer yöntem ise bu karşılaştırmayı method içinde yapmak yani olup olmamasını ekrana yazdırma kısmını methoda taşımak.onuda yukarıdaki satırı bu şekilde değiştirip

            searchocc(N, X, y, ref found, ref occ);
            

if else satırınıda fonksiyonun içine taşıyıp orda kontrol ettirirsen herhangi bir convert hatası almazsın.Yani found not found işlemini method içinde yap.sonra yukardaki gibi sadece methoda değerlerini gönder main de.method işlemi yapıp yazar ekrana found veya not found.

Yorum yaz