Wywołanie funkcji i zmienne globalne

0

Witam piszę program, który wykonuje pewne obliczenie. Funkcje, która liczy napisałem bez najmniejszych problemów, jednak gdy próbuję ją wywołać w mainie, wyskakuje błąd:
"Field 'Program.t' is never assigned to, and will allways have its default value 0" oraz "An object reference is required for the non - static field, method, or property 'Program.licz()'"
O co chodzi? Dlaczego nie mogę wywoływać funkcji w metodzie statycznej? I dlaczego wywala mi błąd, gdy próbuję odnieść się do zmiennej globalnej w mainie?

0

Hej. A może kod dasz? ;)

0
Panna Olga napisał(a):

Witam piszę program, który wykonuje pewne obliczenie. Funkcje, która liczy napisałem bez najmniejszych problemów, jednak gdy próbuję ją wywołać w mainie, wyskakuje błąd:
"Field 'Program.t' is never assigned to, and will allways have its default value 0" oraz "An object reference is required for the non - static field, method, or property 'Program.licz()'"
O co chodzi? Dlaczego nie mogę wywoływać funkcji w metodzie statycznej? I dlaczego wywala mi błąd, gdy próbuję odnieść się do zmiennej globalnej w mainie?

Edit: zapomniałem wrzucić kodu, proszę:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wylicz_t
{
class Program
{
static public List<double> zmienne = new List<double>();
double t; double h; double fi;

    double licz()
    {
        Console.WriteLine("Podaj fi: "); Console.WriteLine("Podaj h: "); h = Console.Read(); fi = Console.Read();

        zmienne.Add(t); zmienne.Add(fi); zmienne.Add(h);
        Console.WriteLine("Podaj h: "); Console.WriteLine("Podaj fi: ");
        var kp = Math.Atan(45 + (fi / 2)) * Math.Atan(54 + (fi / 2) );
        double rozwiazanie = Math.Pow(t, 3) * (Math.Pow(kp, 2) - 1) - 3 * Math.Pow(t, 2) * h - 3 * t * Math.Pow(h, 2) - Math.Pow(h, 3);

        if (rozwiazanie != 0)
          {
                while (rozwiazanie > 0)
                {
                      rozwiazanie--;
                }

            if (rozwiazanie < 0)
            {
                while (rozwiazanie < 0)
                {
                    rozwiazanie++;
                }
            }
          }
     else
        {
            Console.WriteLine("t = ");
            Console.Write(t);
        }

        return t;
    }

    static void Main(string[] args)
    {
        licz();
    }
}

}

0
Panna Olga napisał(a):
Panna Olga napisał(a):

Witam piszę program, który wykonuje pewne obliczenie. Funkcje, która liczy napisałem bez najmniejszych problemów, jednak gdy próbuję ją wywołać w mainie, wyskakuje błąd:
"Field 'Program.t' is never assigned to, and will allways have its default value 0" oraz "An object reference is required for the non - static field, method, or property 'Program.licz()'"
O co chodzi? Dlaczego nie mogę wywoływać funkcji w metodzie statycznej? I dlaczego wywala mi błąd, gdy próbuję odnieść się do zmiennej globalnej w mainie?

Edit: zapomniałem wrzucić kodu, proszę:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wylicz_t
{
class Program
{
static public List<double> zmienne = new List<double>(); //PO CO?
double t; double h; double fi;

    double licz()
    {
        Console.WriteLine("Podaj fi: "); Console.WriteLine("Podaj h: "); h = Console.Read(); fi = Console.Read(); //ZŁA KOLEJNOŚĆ

        zmienne.Add(t); zmienne.Add(fi); zmienne.Add(h); //PO CO?
        Console.WriteLine("Podaj h: "); Console.WriteLine("Podaj fi: "); // ?
        var kp = Math.Atan(45 + (fi / 2)) * Math.Atan(54 + (fi / 2) );
        double rozwiazanie = Math.Pow(t, 3) * (Math.Pow(kp, 2) - 1) - 3 * Math.Pow(t, 2) * h - 3 * t * Math.Pow(h, 2) - Math.Pow(h, 3);

        if (rozwiazanie != 0)
          {
                while (rozwiazanie > 0)
                {
                      rozwiazanie--;
                }

            if (rozwiazanie < 0)
            {
                while (rozwiazanie < 0)
                {
                    rozwiazanie++;
                }
            }
          }
     else
        {
            Console.WriteLine("t = ");
            Console.Write(t);
        }

        return t;
    }

    static void Main(string[] args)
    {
        licz();
    }
}

}

0

@Min0s Lista przyda mi się przy rozbudowie programu, więc od razu ją zrobiłem żeby do tego nie wracać. Oprócz tego są jakieś błędy? Bo przy kompilacji nadal to samo. ;/

0

@Min0s A jak się definiuje zmienną i się ją wywoła to domyślnie nie ma w niej 0?

0

Próbujesz użyć metody licz() jak by była static a nie jest. To wygląda tak jak byś dodawała te static na czuja.
Tak pola klasy zawsze są inicjalizowane domyślnymi wartościami: https://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

0

@DibbyDum To jak poprawnie wywołać tą metodę? I dlaczego w mainie kiedy próbuję odwołać się do atrybutu, a nie zmiennej zdefiniowanej w funkcji wyskakuje błąd?

0

a gdyby zamiast

            if (rozwiazanie != 0)
              {
                    while (rozwiazanie > 0)
                    {
                          rozwiazanie--;
                    }

                if (rozwiazanie < 0)
                {
                    while (rozwiazanie < 0)
                    {
                        rozwiazanie++;
                    }
                }
              }
         else
            {
                Console.WriteLine("t = ");
                Console.Write(t);
            }

zrobic

if(rozwiazanie == 0)
{
    Console.WriteLine("t = 0");
}

to efekt bylby identyczny...
ogolnie to tak srednio sie to kompiluje ;) moze jakiegos kursu do c# poszukaj?

user image

0

@katelx ale t nie ma się równać 0 tylko zmienna rozwiązanie, a w całym programie chodzi o to żeby znaleźć t...

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0