2014-01-09 3 views
-1

Мой код ниже работает нормально, но я хочу показать сводку в порядке возрастания в соответствии с ее OrderNum. Я попытался поставить Array.Sort(order[x].OrderNum), но ошибка не может конвертировать из int в System.Array. Любые предложения о том, как я могу сортировать это? Большое спасибо!Сортировка массива в порядке возрастания

using System; 

class ShippedOrder 
{ 

    public static void Main() 
    { 
     Order[] order = new Order[5]; 
     int x, y; 
     double grandTotal = 0; 
     bool goodNum; 
     for (x = 0; x < order.Length; ++x) 
     { 
      order[x] = new Order(); 
      Console.Write("Enter order number: "); 
      order[x].OrderNum = Convert.ToInt32(Console.ReadLine()); 
      goodNum = true; 
      for (y = 0; y < x; ++y) 
      { 
       if (order[x].Equals(order[y])) 
        goodNum = false; 
      } 
      while (!goodNum) 
      { 
       Console.Write("Sorry, the order number " + order[x].OrderNum + " is a duplicate. " + "\nPlease re-enter: "); 
       order[x].OrderNum = Convert.ToInt32(Console.ReadLine()); 
       goodNum = true; 
       for (y = 0; y > x; ++y) 
       { 
        if (order[x].Equals(order[y])) 
         goodNum = false; 
       } 
      } 
      Console.Write("Enter customer name: "); 
      order[x].Customer = Console.ReadLine(); 
      Console.Write("Enter Quantity: "); 
      order[x].Quantity = Convert.ToInt32(Console.ReadLine()); 
     } 

     Console.WriteLine("\nSummary:\n"); 
     for (x = 0; x < order.Length; ++x) 
     { 
      Array.Sort(order[x].OrderNum); //This line is where the error is located 
      Console.WriteLine(order[x].ToString()); 
      grandTotal += order[x].Total; 
     } 
     Console.WriteLine("\nTotal for all orders is Php" + grandTotal.ToString("0.00")); 
     Console.Read(); 
    } 

    public class Order 
    { 
     public int orderNum; 
     public string cusName; 
     public int quantity; 
     public double total; 
     public const double ItemPrice = 19.95; 

     public Order() { } 

     public Order(int ordNum, string cusName, int numOrdered) 
     { 
      OrderNum = ordNum; 
      Customer = cusName; 
      Quantity = numOrdered; 
     } 

     public int OrderNum 
     { 
      get { return orderNum; } 
      set { orderNum = value; } 
     } 
     public string Customer 
     { 
      get { return cusName; } 
      set { cusName = value; } 
     } 
     public int Quantity 
     { 
      get 
      { 
       return quantity; 
      } 
      set 
      { 
       quantity = value; 
       total = quantity * ItemPrice + 4; 
      } 
     } 
     public double Total 
     { 
      get 
      { 
       return total; 
      } 
     } 
     public override string ToString() 
     { 
      return ("ShippedOrder " + OrderNum + " " + Customer + " " + Quantity + 
       " @Php" + ItemPrice.ToString("0.00") + " each. " + "Shipping is Php4.00\n" + " The total is Php" + Total.ToString("0.00")); 
     } 

     public override bool Equals(Object e) 
     { 
      bool equal; 
      Order temp = (Order)e; 
      if (OrderNum == temp.OrderNum) 
       equal = true; 
      else 
       equal = false; 
      return equal; 
     } 
     public override int GetHashCode() 
     { 
      return OrderNum; 
     } 
    } 
} 
+0

Вы должны, по крайней мере, получить основной синтаксис права. Программирование не связано с синтаксисом угадывания, вы можете легко найти его. – nvoigt

+2

-1: Стена с кодом. Сократите свой фрагмент до минимальной длины, необходимой для воспроизведения или демонстрации вашей проблемы, чтобы мы могли это понять, вместо того, чтобы расчесывать пустынный код (без комментариев). –

ответ

3

Просто используйте Linq:

order = order.OrderBy(x => x.OrderNum).ToArray(); 
+0

Спасибо за ответ, где я должен положить этот код? – user3103939

+0

Просто удалите ошибочную строку целиком и поместите новую строку прямо перед оператором цикла. –

0

В поисках this link, обнаружил, что Array.sort не будет принимать в качестве параметра целого числа.

Вы должны передать все данные как объект Array.

0

Попробуйте следующее:

order.Sort(delegate (Order o1, Order o2) { 
    return o1.OrderNum.CompareTo(o2.OrderNum); 
}); 
+0

вы можете использовать выражение лямбда здесь, это упростит это -> '(o1, o2) => o1.OrderNum.CompareTo (o2.OrderNum)' – wudzik

Смежные вопросы