I'm a fan of [immutable objects][1] for their various benefits. Below is an example of how to make your `Ingredient` class immutable. Similar techniques can be made to your `Formula` class. I also highly recommend not using `ArrayList` in favor of a generic `List<Ingredient>` as [Trust me - I'm a Doctor][2] [recommends][3].

    sealed class Ingredient
    {
        private readonly string name;
        private readonly decimal percentage;
        private readonly bool isFlour;
        private readonly decimal? weight;

        public string Name { get { return this.name; } }
        public decimal Percentage { get { return this.percentage; } }
        public bool IsFlour { get { return this.isFlour; } }
        public decimal? Weight { get { return this.weight; } }

        public Ingredient(string _Name, decimal _Percent, bool _IsFlour, decimal? _Weight)
        {
            this.name = _Name;
            this.percentage = _Percent;
            this.isFlour = _IsFlour;
            this.weight = _Weight;
        }
    }


  [1]: https://ericlippert.com/tag/immutability/
  [2]: https://codereview.stackexchange.com/users/20868/patryk-%C4%86wiek
  [3]: https://codereview.stackexchange.com/a/20329/6172