Вычисление вероятностей в 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, потому что я дошел до этого вопроса в поисках помощи по проблеме, которая у меня сейчас есть... затем я публикую здесь решение для вашего кода, просто для помощи другим людям, которые прибывают сюда с этого момента, в будущем.