Вычисление вероятностей в C# путем деления 2 переменных

Итак, я пытаюсь создать простую консольную программу, которая рассчитывает шанс вытянуть конкретную карту из колоды торговых карт. На данный момент мой код выглядит примерно так:

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

namespace ConsoleApplication2
{
    class Program
    {
        static string cardOrHand = "null";
        static int cardsInDeck = 40;


        static void Main(string[] args)
        {
            Console.WriteLine("Would you like to calculate card or hand probabilities? (card or hand)");
            cardOrHand = (Console.ReadLine());
            Console.Clear();
            if (cardOrHand == "card")
            {
                cardProbFunction();
            }
        }

        static void cardProbFunction()
        {

        Fraction frac = new Fraction();

            string cardsInDeckInput = "40";
            string quantCardInQuestionInput = "0";
            string turnToDrawInput = "1";
            int turnToDraw = 1;

            int quantCardInQuestion = 0;
            int drawProbability = 0;

            Console.WriteLine("How many cards are in the deck in question?");
            cardsInDeckInput = (Console.ReadLine());
            cardsInDeck = Int32.Parse(cardsInDeckInput);
            Console.Clear();

            Console.WriteLine("How many copies of the card in question?");
            quantCardInQuestionInput = (Console.ReadLine());
            Console.Clear();

            quantCardInQuestion = Int32.Parse(quantCardInQuestionInput);

            Console.WriteLine("On what turn do you wish to draw this card?");
            turnToDrawInput = (Console.ReadLine());
            turnToDraw = Int32.Parse(turnToDrawInput);
            turnToDraw += -1;
            Console.Clear();

            cardsInDeck += -turnToDraw;
            frac=new Fraction (quantCardInQuestion,cardsInDeck);

            Console.WriteLine("You have a " + drawProbability + " chance of drawing that card on that turn, assuming it has not yet been drawn.");
            Console.ReadLine();
        }
    }
}

это приводит к нескольким ошибкам, говорящим "фракция не найдена". Как я могу это исправить и выполнить то, что я пытаюсь достичь?

РЕДАКТИРОВАТЬ: Хорошо, я сделал несколько изменений. Теперь мой код не выдает ошибок, но после запуска программы вместо того, чтобы сказать: "У вас есть шанс 1/40 вытянуть эту карту в этот ход, если она еще не была извлечена", он говорит: "У вас есть ConsoleApplication2.Program+ Небольшая вероятность получить эту карту в этот ход, если она еще не была извлечена. "Мой новый код выглядит следующим образом:

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

namespace ConsoleApplication2
{
    class Program
    {
        public class Fraction
        {
            private int numerator;
            private int denominator;

            public Fraction(int numerator, int denominator){
                this.numerator = numerator;
                this.denominator = denominator;
            }

            public int Numerator
            {
                get { return this.numerator; }
                set { this.numerator = value; }
            }

            public int Denominator
            {
                get { return this.denominator; }
                set
                {
                    if (value == 0)
                    {
                        throw new Exception("0 denominator");
                    }

                    this.denominator = value;
                }
            }

            public override string ToString()
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(this.Numerator + "/" + this.numerator);
                sb.Append(" or ");
                sb.Append(this.Numerator / this.Denominator);

                return base.ToString();
            }
        }
            static string cardOrHand = "null";
            static int cardsInDeck = 40;

            static void Main(string[] args)
            {
                Console.WriteLine("Would you like to calculate card or hand probabilities? (card or hand)");
                cardOrHand = (Console.ReadLine());
                Console.Clear();
                if (cardOrHand == "card")
                {
                    cardProbFunction();
                }
            }
            static void cardProbFunction()
            {


                string cardsInDeckInput = "40";
                string quantCardInQuestionInput = "0";
                string turnToDrawInput = "1";
                int turnToDraw = 1;

                int quantCardInQuestion = 0;

                Console.WriteLine("How many cards are in the deck in question?");
                cardsInDeckInput = (Console.ReadLine());
                cardsInDeck = Int32.Parse(cardsInDeckInput);
                Console.Clear();

                Console.WriteLine("How many copies of the card in question?");
                quantCardInQuestionInput = (Console.ReadLine());
                Console.Clear();

                quantCardInQuestion = Int32.Parse(quantCardInQuestionInput);

                Console.WriteLine("On what turn do you wish to draw this card?");
                turnToDrawInput = (Console.ReadLine());
                turnToDraw = Int32.Parse(turnToDrawInput);
                turnToDraw += -1;
                Console.Clear();

                cardsInDeck += -turnToDraw;
                Fraction drawProbability = new Fraction(quantCardInQuestion, cardsInDeck);

                Console.WriteLine("You have a " + drawProbability + " chance of drawing that card on that turn, assuming it has not yet been drawn.");
                Console.ReadLine();
            }
        }
}

1 ответ

Фракция не может быть найдена

Это из-за строки кода (как показано ниже), где вы пытаетесь создать экземпляр Fraction тип. У вас есть класс с именем Fraction в вашем проекте. Если это так, то вы можете импортировать пространство имен, говоря

using ProjectNamespaceWhereFractionClassHaveBeenDefined

    Fraction frac = new Fraction();

Просто компилятор не может разрешить тип, потому что не может его найти.

Вам необходимо внести некоторые изменения:

        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(this.numerator + "/" + this.denominator);
            sb.Append(" or ");
            sb.Append((decimal)this.numerator/(decimal)this.denominator);

            return sb.ToString();
        }

Вы использовали / с int, и в некоторых случаях это может быть проблемой. И вам нужно вернуть созданную вами строку.

С другой стороны, вам нужно написать сообщение как drawProbability.ToString(), вы просто использовали drawProbability, по этой причине печать была: ConsoleApplication2.Program+Fraction

Я публикую это сейчас, 2020, потому что я дошел до этого вопроса в поисках помощи по проблеме, которая у меня сейчас есть... затем я публикую здесь решение для вашего кода, просто для помощи другим людям, которые прибывают сюда с этого момента, в будущем.

Другие вопросы по тегам