0

私が提案する必要があるのは、コードの下部近くにある「Equals」メソッドです。注意するために、EqualsメソッドはOrderクラス内に含まれている必要があり、なぜ私がそれらを使用しなかったのか疑問に思った場合に備えて、自動実装プロパティを使用することはできません。equalsメソッドの機能は、現在のすべての注文番号(現在、1人のユーザーと3人の自動化された番号)で重複を検索することです。ユーザー入力なしで、または一連の「if」ステートメントを使用せずにこれを行う方法を理解できません。どんな提案も素晴らしいでしょう、ありがとう。~~下部にある他の2つの方法は完了していません~~

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

namespace Assignment3
{
  class Program
  {
    static void Main(string[] args)
    {
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
        // USER CONTROLLED
        int ordNum;
        Console.Write("Enter Order Number: ");
        ordNum = Convert.ToInt16(Console.ReadLine());

        string custName;
        Console.Write("Enter Customer Name: ");
        custName = Console.ReadLine();

        int quantity;
        Console.Write("Enter Quantity: ");
        quantity = Convert.ToInt32(Console.ReadLine());

        Order firstOrder = new Order(ordNum, custName, quantity);

        Console.WriteLine("Customer: {0}\nOrder Number: {1}\nQuantity" +
        "Ordered: {2}\nTotal Price: {3}", firstOrder.Customer, firstOrder.OrderNum, firstOrder.QuantityOrd, firstOrder.Total);
        // USER CONTROLLED

        // AUTOMATED
        // FIRST
        int firstOrdNum = 678123;
        string firstName ="P Jenkins";
        int firstQuantity = 35;
        Order firstAutomated = new Order(firstOrdNum, firstName, firstQuantity); // first Instance of Order
        // END OF FIRST

        // SECOND
        int secondOrdNum = 678123;
        string secondName = "L Jenkins";
        int secondQuantity = 35;
        Order secondAutomated = new Order(secondOrdNum, secondName, secondQuantity);
        // END OF SECOND

        // THIRD
        int thirdOrdNum = 49284;
        string thirdName = "McDonalds";
        int thirdQuantity = 78;
        Order thirdAutomated = new Order(thirdOrdNum, thirdName, thirdQuantity);
        // END OF THIRD
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



    }
}
class Order
{
    private int orderNum;
    private string customer;
    private int quantityOrd;
    public const double amt = 19.95;
    private double totalPrice;
    // PROPERTIES TO ACCES PRIVATE DATA
    public int OrderNum // CHECK
    {
        get
        {
            return orderNum;
        }
        set
        {
            orderNum = value;
        }
    }
    public string Customer // CHECK
    {
        get
        {
            return customer;
        }
        set
        {
            customer = value;
        }
    }
    public int QuantityOrd // CHECK
    {
        get
        {
            return quantityOrd;
        }
        set
        {
            quantityOrd = value;
            CalcTotalPrice();
        }
    }
    public double Total // CHECK
    {
        get
        {
            return totalPrice;
        }
    }      
    // CALCULATE TOTAL
    private void CalcTotalPrice()
    {
        totalPrice = QuantityOrd * amt;
    }
    // EQUALS METHOD 
    public void Equals(int ordNum1, int ordNum2)
    {
        Console.WriteLine("The two orders by P Jenkens (Order Number: {0}) and L Jenkens (Order Number: {1})" +
            "are the same order!", ordNum1, ordNum2);
    }
    public void GetHashCode(string customer, double hashCode)
    {
        Console.WriteLine("The Hash Code of Customer {0} is {1}", customer, hashCode);
    }
    public void ToString()
    {
    }


    // CONSTRUCTOR TO ACCEPT VALUES
    public Order(int ordNum, string cust, int qntOrd)
    {
        OrderNum = ordNum;
        Customer = cust;
        QuantityOrd = qntOrd;
    }

}
4

1 に答える 1

0

Orderそれぞれに一意の識別子が必要なようです。2 つの注文が同じ注文であるかどうかを確認するには、それらの ID を比較します。2 つの注文の内部状態が同じかどうかを確認することは、通常の Equals のようなものです。

ID を使用して注文にアクセスする場合は、それらを辞書に保存する必要があります。

ここでは多くのことが欠けていますが、一般的な考え方は次のようなものです。

public class Order
{
    ...

    private static Dictionary<int, Order> _orders = new Dictionary<int, Order>();

    public static Order Get(int id)
    {
        return this._order[id];
    }

    private static object _idLocker = new object();
    private static int _nextId = 0;
    public readonly int Id;

    public Order()
    {
        // Just to make sure that the identifiers are unique,
        // even if you have threads messing around.
        lock (_idLocker)
        {
            this.Id = _nextId;
            _nextId++;
        }

        _orders.Add(this.Id, this);
    }

    public Order(int id)
    {
        this.Id = id;
        _orders.Add(this.Id, this);
    }

    public static bool Equals(int id1, int id2)
    {
        return _orders[id1].Equals(_orders[id2]);
    }

    public bool Equals(Order otherOrder)
    {
        // Check whether you have the same inner state as the other order
    }
}
于 2012-06-12T02:26:37.073 に答える