In my Fraction class, I have the numerator = 0 and denominator = 0, both set to private. If I make these public, my calculator GUI shows 0/1 as it's initial variable instead of 0. If they remain private, I get a CS0122, since they cannot access the variables. How can I make them accessible by the GUI and not present as the initial value in the GUI?
GUI CODE
using System;
using System.Windows.Forms;
namespace FractionCalculatorWithGUI_Final
{
public partial class MainForm : Form
{
private enum DISPLAY_MODE { CURRENT_VALUE, ACCUMULATOR }
private enum FractionValue { numerator, denominator }
private FractionValue fractionValue = FractionValue.numerator;
private enum OPERATION { ADD, SUB, MUL, DIV }
private Fraction accumulator = new Fraction();
private OPERATION currentOperation = OPERATION.ADD;
private Fraction currentValue = new Fraction();
private DISPLAY_MODE displayMode = DISPLAY_MODE.CURRENT_VALUE;
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
UpdateDisplay();
}
private void textBoxDisplay_TextChanged(object sender, EventArgs e)
{
}
private void UpdateDisplay()
{
switch (displayMode)
{
case DISPLAY_MODE.ACCUMULATOR:
textBoxDisplay.Text = accumulator.ToString();
break;
case DISPLAY_MODE.CURRENT_VALUE:
textBoxDisplay.Text = currentValue.ToString();
break;
}
}
private void buttonSlash_Click(object sender, EventArgs e)
{
fractionValue = FractionValue.denominator;
textBoxDisplay.Text = currentValue.ToString() + "/";
UpdateDisplay();
}
private void NumberKeyHit(int number)
{
displayMode = DISPLAY_MODE.CURRENT_VALUE;
if (fractionValue == FractionValue.numerator)
{
currentValue.numerator = currentValue.numerator * 10 + number;
}
else
{
currentValue.denominator = currentValue.denominator * 10 + number;
}
UpdateDisplay();
}
Fraction Class
namespace FractionCalculatorWithGUI_Final
{
internal class Fraction : IComparable
{
private int numerator = 0;
private int denominator = 1;
public int CompareTo(object rightObject)
{
// typecast the object parameter to a Fraction
Fraction rightFrac = (Fraction)rightObject;
// get both Fractions as (comparable) doubles
double f1 = (double)(this.numerator) / (double)(this.denominator);
double f2 = (double)(rightFrac.numerator) / (double)(rightFrac.denominator);
// compare the 2 doubles
int retVal = 0;
if (f1 < f2)
retVal = -1;
else if (f1 == f2)
retVal = 0;
else
retVal = 1;
return retVal;
}
public override bool Equals(object obj)
{
bool equals = false;
if (obj is Fraction)
equals = (this == (Fraction)obj);
return equals;
}
public static Fraction Parse(String str)
{
Fraction newFraction = new Fraction();
int indexSlash = str.IndexOf("/");
if (indexSlash == -1)
{
throw new ArgumentException("'/' Character not detected. Please input '/' when writing the fraction.");
}
newFraction.numerator = int.Parse(str.Substring(0, indexSlash));
newFraction.denominator = int.Parse(str.Substring(indexSlash + 1));
return newFraction;
}
public static Fraction operator + (Fraction firstFrac, Fraction secondFrac)
{
Fraction sum = new Fraction();
sum.numerator = ((firstFrac.numerator * secondFrac.denominator) + (secondFrac.numerator * firstFrac.denominator));
sum.denominator = firstFrac.denominator * secondFrac.denominator;
return sum;
}
public static Fraction operator - (Fraction firstFrac, Fraction secondFrac)
{
Fraction difference = new Fraction();
difference.numerator = ((firstFrac.numerator * secondFrac.denominator) - (secondFrac.numerator * firstFrac.denominator));
difference.denominator = firstFrac.denominator * secondFrac.denominator;
return difference;
}
public static Fraction operator * (Fraction firstFrac, Fraction secondFrac)
{
Fraction product = new Fraction();
product.numerator = firstFrac.numerator * secondFrac.numerator;
product.denominator = firstFrac.denominator * secondFrac.denominator;
return product;
}
public static Fraction operator / (Fraction firstFrac, Fraction secondFrac)
{
Fraction dividend = new Fraction();
dividend.numerator = firstFrac.numerator * secondFrac.denominator;
dividend.denominator = firstFrac.denominator * secondFrac.numerator;
return dividend;
}
override public String ToString()
{
return numerator.ToString() + "/" + denominator.ToString();
}
}
}