Wątek przeniesiony 2017-08-31 13:28 z C# i .NET przez somekind.

czy mozna uniknac "return" w metodach

0

Witam,

Stworzylem taki kod:

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

namespace Rysowawanie_figur
{
    class Program
    {
        static char Rysuj (int dlugo, int szro, char znak)
        {
            for (int i  = 0; dlugo > i; i++)
            {
                for (int ii = 0; szro > ii; ii++)
                {
                    Console.Write(znak);
                }
                Console.WriteLine("");
            }

           return znak;
        }



        static void Main(string[] args)
        {
            Console.WriteLine("Podaj dlugosc");
            int dlugosc = int.Parse(Console.ReadLine());

            Console.WriteLine("Podaj szerokosc");
            int szerokosc = int.Parse(Console.ReadLine());

            Console.WriteLine("Podaj znak");
            char znak = char.Parse(Console.ReadLine());

            char Wyglad;

            Wyglad =  Rysuj(dlugosc, szerokosc, znak);

            Console.WriteLine(Wyglad);
            Console.ReadKey();
        }
    }
}

Problem jest w miejscu "return znak;"...
Gdy go usune "return" --> jest blad, gdy zmieniam typ metody na void --> tez blad.

Co zrobic, mozna jakos uniknac uzywania slowa "return"?
Dzieki za pomoc.

pozdrawiam

0

Jak chcesz mieć wartość zwracaną musisz mieć return bo taka jest składnia języka.
Jak nie lubisz return to użyj innego języka np Scala.

0
            char Wyglad;
 
            Wyglad =  Rysuj(dlugosc, szerokosc, znak);
 
            Console.WriteLine(Wyglad);

tak uzywasz swojej funkcji, jezeli nic nie bedzie zwracac, to nic sie nie wyswietli

wiec moze powiesz co chcesz zrobic zamiast mowic ze chcesz usunac returna ;)

0

Jak nie chcesz używać "returna" to używasz "voida" ;).

1

Problem jest w miejscu "return znak;"...
Gdy go usune "return" --> jest blad, gdy zmieniam typ metody na void --> tez blad.

Czytamy komunikaty! Błąd błędowi nierówny. Po usunięciu return'a i zmianie na void, zmień też wywowłanie w funkcji Main i będzie działać :)

0

Ten return 0; w mainie powinien być, bo dzięki temu można sprawdzić później w %errorlevel% czy aplikacja zakończyła się bez błędu.
Ale ogólnie to taka prehistoryczna pozostałość po dawnym funkcjonowaniu aplikacji.

Ale bez tego też powinno działać i działa, ale funkcja nie może deklarować zwracanego typu wyjątek void, który jest jakby to powiedzieć wszystkim i niczym.

1

@Barteker: nie rozumiesz podstaw.

Co robi taka metoda:

string Foo(string s)
{
    return s + "_abc";
}

Jeśli napiszesz do tego taki kod:

Console.WriteLine(Foo("Cześć"));

to w efekcie zobaczysz napis: "Cześć_abc". Zgadza się?
Dobrze, co robi metoda WriteLine? Wypisuje jakiś tekst na ekranie. Jaki? Taki, który jej przekażesz. A co robi metoda Foo? Zwraca jakiś string. Czyli jakiś tekst. I jeśli masz wywołanie:

Console.WriteLine(Foo("Cześć"));

to metoda WriteLine wypisze taki tekst, jaki zwróci jej metoda Foo, zgadza się?
A jeśli teraz metoda Foo wyglądałaby tak:

void Foo(string s)
{

}

To co ma napisać WriteLine? W ogóle co ma się zadziać? Przecież WriteLine spodziewa się, że w parametrze dostanie np. jakiegoś stringa. A co dostaje tutaj? W ogóle nie dostaje stringa, tylko "void". A co ona ma zrobić z tym voidem? Nic. To jest tak, jakbyś chciał przełożyć rękę przez dziurkę od igły. Przecież dziurka od igły spodziewa się nitki, a nie Twojej ręki. Rozumiesz?

0

O coś takiego ci chodziło?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Rysowawanie_figur
{
    class Program
    {
        static void Rysuj (int dlugo, int szro, char znak)
        {
            for (int i  = 0; dlugo > i; i++)
            {
                for (int ii = 0; szro > ii; ii++)
                {
                    Console.Write(znak);
                }
                Console.WriteLine("");
            }
        }
 
        static void Main(string[] args)
        {
            Console.WriteLine("Podaj dlugosc");
            int dlugosc = int.Parse(Console.ReadLine());
 
            Console.WriteLine("Podaj szerokosc");
            int szerokosc = int.Parse(Console.ReadLine());
 
            Console.WriteLine("Podaj znak");
            char znak = char.Parse(Console.ReadLine());
 
            Rysuj(dlugosc, szerokosc, znak);
 
            Console.WriteLine(znak);
            Console.ReadKey();
        }
    }
}

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