2015-10-13 2 views
1

При запуске программы без использования статического метода он говорил, что ...статической силы Основной метод испытания codility

Запуск решения ... Компиляция успешной. Пример: [-1, 3, -4, 5, 1, -6, 2, 1] OK Ваш код синтаксически корректный и корректно работает в примере теста.

Когда я использовал статический метод ...

static void Main(string[] args) 
    { 
     int difference = new Solution().solution(new int[] { -1, 3, -4, 5, 1, -6, 2, 1}); 
     Console.WriteLine(difference); 
     Console.ReadKey(); 
    } 

я получаю сообщение об ошибке ...

Запуск решения ... Компилятор вывода: компиляции не удалось: 2 ошибки (s), 0 предупреждений user.cs (16,24): ошибка CS0017: Программа user.exe' has more than one entry point defined: SolutionWrapper.Main (строка []) ' Solution.cs (40,17): ошибка CS0017: Программа user.exe' has more than one entry point defined: Solution.Main (string []) ' Обнаружили некоторые ошибки.

Я смотрел на вызов Tape-Equilibrium, и это то, что я пытался сделать, и если я удалить статический метод пустот нет ошибок ....

static void Main(string[] args) 
    { 
     int difference = new Program().solution(new int[] { -1, 3, -4, 5, 1, -6, 2, 1}); 
     Console.WriteLine(difference); 
     Console.ReadKey(); 
    } 

    public int solution(int[] A) 
    { 
     // write your code in C# 6.0 with .NET 4.5 (Mono) 
     var length = A.Length; 

     if (length == 1) return A[0]; 
     if (length == 2) return Math.Abs(A[0] - A[1]); 

     var leftSum = 0; 
     var rightSum = 0; 

     for (var i = 0; i < length; i++) 
     { 
      rightSum += A[i]; 
     } 

     var difference = int.MaxValue; 

     for (var i = 0; i < length - 1; i++) 
     { 
      var value = A[i]; 

      leftSum += value; 
      rightSum -= value; 

      difference = Math.Min(difference, Math.Abs(rightSum - leftSum)); 

      if (difference == 0) return 0; 
     } 

     return difference; 
    } 

Является ли статический метод не для использования тогда?

+5

У вас есть 2 'Main' методы? это не разрешено. – singsuyash

+0

Для меня создан один метод (int [] A) {// code здесь} – Person

+0

Я имею в виду, что во всем коде у вас есть более 1 'public static void Main (строка [ ] args) 'определения метода. Независимо от того, в каком классе они находятся? Это запрещено. Любая программа может иметь только одну точку входа. Метод «Главная» - это точка входа. у вас есть 2, где программа начнет выполнение? – singsuyash

ответ

0

Вы получаете эту ошибку, так как у вас есть два static public void Main(), определенные в коде.

Как можно автогенерировать, вы не сможете его легко удалить. Вы можете обойти это, установив объект запуска для своего проекта в свойствах проекта> Параметры приложения, или - если вы строите вручную - используя параметр компилятора /main, укажите путь к Main, который вы хотите в качестве точки входа.

+0

Я не знал об этом. Означает ли это, что мы * можем * иметь 2 'Основные' методы? – singsuyash

+0

@David Arno - Если я использую public int solution (int [] A) и не оставляю статический void Main (string [] args), я не пройду тест? – Person

+0

@singsuyash, вы можете ... это не значит, что вы должны хотя! :) –

1

Делай это ... Это сработает.

using System; 

class Solution { 
    public int solution(int[] A) { 
    // write your code in C# 6.0 with .NET 4.5 (Mono) 
    var length = A.Length; 

    if (length == 1) return A[0]; 
    if (length == 2) return Math.Abs(A[0] - A[1]); 

    var leftSum = 0; 
    var rightSum = 0; 

    for (var i = 0; i < length; i++) 
    { 
     rightSum += A[i]; 
    } 

    var difference = int.MaxValue; 

    for (var i = 0; i < length - 1; i++) 
    { 
     var value = A[i]; 

     leftSum += value; 
     rightSum -= value; 

     difference = Math.Min(difference, Math.Abs(rightSum - leftSum)); 

     if (difference == 0) return 0; 
    } 
    Console.WriteLine(difference); 
    return difference; 
} 
} 
Смежные вопросы