2014-02-19 5 views
0

Я создал класс QuickSort массива целых чисел, и теперь им пытается называть этот класс из программы, но я получаю сообщение об ошибке, класс выглядит следующим образом:Попытки вызвать класс от Program.cs

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

namespace QuicksortSimpel 
{ 
    class Class1 
    { 
     public static void Quicksort(IComparable[] elements,int left, int right) 
     { 

      //Define i and j and pick an pivot to compare other numbers 
      int i = left, j = right; 
      IComparable pivot = elements[left + (left + right)/2]; 

      //Compare numbers and then compare to pivot 
      while (i <= j) 
      { 
       while (elements[i].CompareTo(pivot) < 0) 
       { 
        i++; 
       } 

       while (elements[j].CompareTo(pivot) > 0) 
       { 
        j--; 
       } 

       if (i <= j) 
       { 
        // Switch 
        IComparable tmp = elements[i]; 
        elements[i] = elements[j]; 
        elements[j] = tmp; 

        i++; 
        j--; 
       } 
      } 
      // repeat 
      if (left < j) 
      { 
       Quicksort(elements, left, j); 
      } 

      if (i < right) 
      { 
       Quicksort(elements, i, right); 
      } 
     } 
    } 
} 

Я стараюсь называть это так:

numbers = Class1.Quicksort(numbers); 

ошибка, что я получаю это:

нет перегрузки для метода быстрой сортировки не требуется 1 аргументов.

+2

Сообщение об ошибке нечеткое? Может быть, используя 'params'? –

ответ

4

Это потому, что Class1.Quicksort(); принимает три аргумента, и вы проходите 1. И также он ничего не возвращает, поэтому numbers = Class1.Quicksort(); не будет работать.

Вы можете перегрузить или установить дополнительные параметры/параметры по умолчанию (спасибо Silo).

public static void Quicksort(IComparable[] elements,int left = 0, int right = 0) 

или

public static void Quicksort(IComparable[] elements) 
{ 
    QuickSort(elements, 0,0); 
} 
+0

Это определенно причина ошибки. Если вы хотите передать один параметр, задайте значения по умолчанию для левого и правого значений (или создайте перегрузки). Например: 'QuickSort (IComparable [] elements, int left = 0, int right = 0)'. Кроме того, я настоятельно рекомендую использовать «IEnumerable » вместо массива для большей гибкости (ваше возвращаемое значение также будет отсортировано «IEnumerable »). – Erik

+0

Итак, когда я передаю 3 аргумента (массив, который нужно отсортировать) и два ints, я получу еще одну ошибку: Наилучшее перегруженное совпадение метода для 'QuicksortSimpel.Class1.Quicksort (System.IComparable [], int, int)»имеет некоторые недопустимые аргументы и не может преобразовать из 'межд []' на 'System.IComparable [] \t Это также happends, когда я поставил (IComparable [] элементы, внутр слева = 0, внутр вправо = 0) в классе –

+0

@ D3l4n0 Это может произойти из-за того, что массив, который вы передаете, не является массивом 'System.IComparable', вы уверены, что объекты в массиве таковы? –

0

Вы получаете эту ошибку, потому что компилятор метод класса QuickStart() ожидает три Params тем временем вы обеспечиваете его только один из параметров.

Ваш класс не является статическим, так почему вы обращаетесь к нему с именем класса? Вам нужно создать объект Class1, а затем вызвать метод сортировки по этому объекту. Я также отметил, что вы присваиваете возвращаемое значение из этого метода некоторой переменной, но в определении функции вы ничего не возвращаете ??

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