Статическая ошибка: у этого класса нет статического основного метода void, принимающего String [] - PullRequest
1 голос
/ 21 января 2011

Поскольку я хочу, чтобы пользователь вводил числа вместо строк, которые я использовал

public static void main(Integer[] args)

Итак, почему это не так?

Ответы [ 6 ]

4 голосов
/ 21 января 2011

Подпись на вашем основном методе ДОЛЖНА быть:

public static void main(String[] args)

У вас нет другого выбора.Вы можете анализировать эти строки как целые числа, если вам нужно, через Integer.parseInt(someString)

3 голосов
/ 21 января 2011

Main является особенным, так как он должен присутствовать для запуска программы, поэтому он должен иметь фиксированную подпись. Под капотом среда выполнения Java ищет магическую подпись для запуска программы. Волшебная подпись

public static void main(String[] args)

Если вы хотите получить целые числа, вам нужно разобрать их после факта, используя

Integer.parseInt( x );
2 голосов
/ 21 января 2011

Вы можете только иметь массив String [] для вашего основного метода (если вы не перегружаете его, но давайте пока не будем вдаваться в подробности :-D).

Однако вы можете изменить каждый элемент аргументов String [] в int, используя Integer.parseInt , что-то вроде

public static void main(String[] args)
{
 int[] values = new int[args.length];
 for (String arg : args)
 {
  //Get or do something with the integer value here
 }
}

Это потому, что базовая платформа знает, как передать Strings в вашу программу. Когда вы открываете командную строку или терминал и делаете:

>java MyClass 3 4 5

Он не знает, что вы хотите, чтобы ["3", "4", "5"] рассматривались как целые числа. Это оставляет дело со Струнами до программы.

1 голос
/ 21 января 2011

Когда JVM загружает ваш класс и пытается его выполнить, он ищет метод main () с подписью

public static void main (String[] args) ...

Все остальное недопустимо. Если вы ожидаете целые числа, используйте метод Integer.parseInt () для преобразования входных строк в целые числа, как упоминал Зак. Я бы поместил это преобразование в блок try-catch, чтобы перехватить NumberFormatException, и иметь

System.err.println ("This class accepts Integer arguments only"); 

в соответствующем блоке захвата. С уважением, - М.С.

0 голосов
/ 21 января 2011

сигнатура метода для main всегда (String [] args). Если вы хотите получить целые числа, вам нужно преобразовать args [] в int, используя фрагмент ниже

  int aInt = Integer.parseInt(args[0]);
0 голосов
/ 21 января 2011

Вам нужно будет принять массив строк и преобразовать строки в целые числа во время выполнения. Как это работает ...

...