Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 6

Два способа создания методов

22.12.2018, 00:47. Показов 4303. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Надо сделать лабораторную работу в C# на создание двух одинаковых методов, которые вызываются по-разному.
Первый метод должен возвращать результат в имени функции, а второй через параметры

У меня задание создать метод, который определяет знак зодиака по введенной дате рождения(день и месяц).

Я создал метод, которому передаются параметры d и m , и в соответствии с введенными данными выводится текст со знаком зодиака.
Вызываю я его через FindZ(d, m)

В общем, правильно ли я создал один из двух способов вызова метода. И вообще, что значит метод, возвращающий результат в имени функции, а что значит через параметры?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2018, 00:47
Ответы с готовыми решениями:

Написать еще два способа решения
int c = 0, k; Console.WriteLine("Введите число"); k = Int32.Parse(Console.ReadLine()); while (k...

Чем отличаются два приведенные способа Return
Здравствуйте знатоки С# Есть функция private static Tree FindMin(Tree sourse) { Чем отличается эти два куска кода if...

Два способа подключить библиотеку к проекту: через references и DllImport - в чем отличие
Всем привет. Есть два способа подключить библиотеку к проекту: через references и DllImport, а в чем отличие этих двух способов? Заранее...

6
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
22.12.2018, 04:14
Цитата Сообщение от Hann1bal Посмотреть сообщение
возвращающий результат в имени функции
Оно не так называется. Имеется ввиду функция которая возвращает результат.

Например,

C#
1
2
3
4
int Sum(int a, int b) 
{
    return a+b;
}
Если вызвать эту функцию следующим образом,

C#
1
int c = Sum(1,2);
То результат который возвращает функция будет записан в переменную c

Другой способ вернуть значение из функции - это использовать параметр (или несколько параметров) обозначеный как out

Например,

C#
1
2
3
4
5
void CalcSumAndAverage(int a, int b, out int sum, out int average)
{
     sum = a+b;
     average = (a+b)/2;
}
Использование:

C#
1
2
3
int rSum;
int rAverage;
CalcSumAndAverage(3,5, out rSum, out rAverage);
После выполнения функции переменные rSum, rAverage будут содержать значения, которые были установлены внутри функции.

Ничто не мешает также скомбинировать эти способы и создать функцию, которая будет и возвращать значение и заполнять out параметры.

C#
1
2
3
4
5
6
7
8
9
10
11
bool TryDivide(int a, int b, out int? result)
{
     if (b == 0) 
    {
          result = null;
    }
    else
    {
          result = a / b;
    }
}

А также out параметры можно обьявлять прямо в вызове функции
C#
1
2
3
4
if (TryDivide(10, 2, out int? result)) 
{
      Console.WriteLine(result);
}
0
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 6
22.12.2018, 11:19  [ТС]
Так у меня же строчка всегда возвращается с названием знака зодиака
0
 Аватар для dyra_salva
19 / 11 / 8
Регистрация: 19.11.2015
Сообщений: 60
22.12.2018, 16:42
Лучший ответ Сообщение было отмечено Hann1bal как решение

Решение

Первый способ через возвращение значения из функции:
C#
1
2
3
4
5
public static string checkYourSign (int d, int m) 
{
   //...
   return sign;
}
И вызов будет таким:
C#
1
Console.WriteLine("Ваш знак зодиака: "+checkYourSign(day,month)+".");
Второй - через параметры метода:
C#
1
2
3
4
public static void checkYourSign_v2 (int d, int m, out string sign)
{
   //...
}
Вызов:
C#
1
2
3
string s = "";
checkYourSign_v2(day,month,out s);
Console.WriteLine("Ваш знак зодиака: "+s+".");
1
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 6
22.12.2018, 18:58  [ТС]
Броо, подскажи плиз кое-что. Почти сделал задание, но со вторым методом возникла какая-то ошибка. Я её пометил как коммент. Подскажи плиз





C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApp2
{
    class Program
    {
        private static string sign;
 
        public static string checkYourSign(int d, int m)
        {
            if ((d >= 21 && m == 1) || (d <= 20 && m == 2)) sign = "Водолей";
            else if ((d >= 21 && m == 2) || (d <= 20 && m == 3)) sign = "Рыбы";
            else if ((d >= 21 && m == 3) || (d <= 20 && m == 4)) sign = "Овен";
            else if ((d >= 21 && m == 4) || (d <= 20 && m == 5)) sign = "Телец";
            else if ((d >= 21 && m == 5) || (d <= 21 && m == 6)) sign = "Близнецы";
            else if ((d >= 22 && m == 6) || (d <= 22 && m == 7)) sign = "Рак";
            else if ((d >= 23 && m == 7) || (d <= 23 && m == 8)) sign = "Лев";
            else if ((d >= 24 && m == 8) || (d <= 23 && m == 9)) sign = "Дева";
            else if ((d >= 24 && m == 9) || (d <= 23 && m == 10)) sign = "Весы";
            else if ((d >= 24 && m == 10) || (d <= 22 && m == 11)) sign = "Скорпион";
            else if ((d >= 23 && m == 11) || (d <= 21 && m == 12)) sign = "Стрелец";
            else if ((d >= 22 && m == 12) || (d <= 20 && m == 1)) sign = "Козерог";
            return sign;
        }
 
        public static void checkYourSign2(int day, int month, out string sign)             // До передачи управления из текущего метода параметру, помеченному ключевым словом out, "sign" должно быть присвоено значение.
        {
            if ((day >= 21 && month == 1) || (day <= 20 && month == 2)) sign = "Водолей";
            else if ((day >= 21 && month == 2) || (day <= 20 && month == 3)) sign = "Рыбы";
            else if ((day >= 21 && month == 3) || (day <= 20 && month == 4)) sign = "Овен";
            else if ((day >= 21 && month == 4) || (day <= 20 && month == 5)) sign = "Телец";
            else if ((day >= 21 && month == 5) || (day <= 21 && month == 6)) sign = "Близнецы";
            else if ((day >= 22 && month == 6) || (day <= 22 && month == 7)) sign = "Рак";
            else if ((day >= 23 && month == 7) || (day <= 23 && month == 8)) sign = "Лев";
            else if ((day >= 24 && month == 8) || (day <= 23 && month == 9)) sign = "Дева";
            else if ((day >= 24 && month == 9) || (day <= 23 && month == 10)) sign = "Весы";
            else if ((day >= 24 && month == 10) || (day <= 22 && month == 11)) sign = "Скорпион";
            else if ((day >= 23 && month == 11) || (day <= 21 && month == 12)) sign = "Стрелец";
            else if ((day >= 22 && month == 12) || (day <= 20 && month == 1)) sign = "Козерог";
        }
 
        static void Main(string[] args)
        {
            Console.Write("Введите день вашего рождения: ");
            int d = int.Parse(Console.ReadLine());
            Console.Write("Введите месяц вашего рождения: ");
            int m = int.Parse(Console.ReadLine());
            Console.WriteLine("Ваш знак зодиака: " + checkYourSign(d, m));
            Console.ReadKey();
 
            Console.Write("Введите день вашего рождения: ");
            int day = int.Parse(Console.ReadLine());
            Console.Write("Введите месяц вашего рождения: ");
            int month = int.Parse(Console.ReadLine());
            checkYourSign2(day, month, out string sign);
            Console.WriteLine("Ваш знак зодиака: " + sign + ".");
            Console.ReadKey();
        }
    }
}
0
 Аватар для Nanodesy
13 / 9 / 4
Регистрация: 23.10.2018
Сообщений: 31
22.12.2018, 19:18
Лучший ответ Сообщение было отмечено Hann1bal как решение

Решение

Hann1bal, фиксится добавлением в начало данного метода такой строчки, ну а там сам разберешься как лучше

C#
1
sign = " ";
Это получается в связи с тем что может получится такая ситуация, что sing не будет равно вообще чему либо и тогда косяк с выдачей не понятно какого значения
1
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
22.12.2018, 21:15
Hann1bal, эта ошибка у вас возникает потому что компилятор не понимает какую переменную вы заполняете.
эту
C#
1
 private static string sign;
или эту
C#
1
 public static void checkYourSign2(int day, int month, out string sign)
поэтому переменные в классе лучше именовать по разному. Приватные переменные обычно делают с подчеркиванием
C#
1
 private static string _sign;
и вообще данные для двух методов лучше не хранить одной статической переменной иначе вы можете получить неадекватное поведение если будете вызывать методы из разных потоков. Статическая переменная будет использоваться во всех экземплярах класса одна. таким образом данные в ней могут быть перезаписаны.

Так же логику лучше не дублировать если она у вас реализована в одном из методов.
если это все переделать то ваши методы будут выглядеть так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
        public static string checkYourSign(int d, int m)
        {
string _sign="";
            if ((d >= 21 && m == 1) || (d <= 20 && m == 2)) _sign = "Водолей";
            else if ((d >= 21 && m == 2) || (d <= 20 && m == 3)) _sign = "Рыбы";
            else if ((d >= 21 && m == 3) || (d <= 20 && m == 4)) _sign = "Овен";
            else if ((d >= 21 && m == 4) || (d <= 20 && m == 5)) _sign = "Телец";
            else if ((d >= 21 && m == 5) || (d <= 21 && m == 6)) _sign = "Близнецы";
            else if ((d >= 22 && m == 6) || (d <= 22 && m == 7)) _sign = "Рак";
            else if ((d >= 23 && m == 7) || (d <= 23 && m == 8)) _sign = "Лев";
            else if ((d >= 24 && m == 8) || (d <= 23 && m == 9)) _sign = "Дева";
            else if ((d >= 24 && m == 9) || (d <= 23 && m == 10)) _sign = "Весы";
            else if ((d >= 24 && m == 10) || (d <= 22 && m == 11)) _sign = "Скорпион";
            else if ((d >= 23 && m == 11) || (d <= 21 && m == 12)) _sign = "Стрелец";
            else if ((d >= 22 && m == 12) || (d <= 20 && m == 1)) _sign = "Козерог";
            return _sign;
        }
        public static void checkYourSign(int day, int month, out string sign)   
        {
            sign = checkYourSign( day, int month)
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2018, 21:15
Помогаю со студенческими работами здесь

основы создания классов и методов
Помогите пожалуйста))) нужно создать: Класс «Одежда» Поля: тип (брюки, рубашка и т.д.), стоимость и т.д. Для поля «тип»...

Наследование методов. Не работают два аналогичных метода
Доброго времени суток! Пытаюсь реализовать наследование методов, и вот вроде и решил свою задачу, но выяснилось, что второй метод (shiftY),...

Теория создания обертки для методов
Добрый день. Помогите пожалуйста в следующем вопросе. Допустим у меня есть классы: class A { void methodA(object parametrs) { ...

Два способа решения - два разных ответа
почему-то два разных способа решения задачи приводят к двум разным ответам. Задача такова: Есть уравнение j - Sqrt]]...

Модальное окно: выбор способа создания.
Подскажите.. По нажатию на кнопку &quot;More&quot; должно всплывать модальное окно.. Как лучше сделать, чем пользоваться? Готовыми...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru