2013-02-23 2 views
1

Синтаксически корректно иметь метод внутри основного метода в Java? НапримерМетоды внутри методов

class Blastoff { 

    public static void main(String[] args) { 

     //countdown method inside main 
     public static void countdown(int n) { 

      if (n == 0) { 
       System.out.println("Blastoff!"); 
      } else { 
       System.out.println(n); 
       countdown(n - 1); 
      } 
     } 
    } 
} 
+0

Это не метод внутри методов, это называется рекурсией. И да, ваш алгоритм выглядит правильно. –

+10

@LuiggiMendoza Хотя 'countdown' является рекурсивным, он также лексически вложен внутри' main'. – delnan

+0

Я спрашиваю о той части, где у меня есть метод обратного отсчета в основном методе, потому что мой компилятор говорит, что в этой строке есть ошибка – user1940007

ответ

7

Нет, не напрямую; однако способ может содержать локальный внутренний класс , и, конечно, этот внутренний класс может содержать методы. This StackOverflow question дает некоторые примеры этого.

В вашем случае, однако, вы, вероятно, просто хотите позвонить countdown изнутри main; вам действительно не нужно, чтобы все его определение находилось внутри main. Например:

class Blastoff { 

    public static void main(String[] args) { 
     countdown(Integer.parseInt(args[0])); 
    } 

    private static void countdown(int n) { 
     if (n == 0) { 
      System.out.println("Blastoff!"); 
     } else { 
      System.out.println(n); 
      countdown(n - 1); 
     } 
    } 
} 

(Обратите внимание, что я объявил countdown как private, так что его можно назвать только внутри Blastoff класса, который я предполагаю, что было ваше намерение?)

+0

Да, это мое намерение. Я все еще получаю зависание всей структуры класса/методов/объектов, что именно делает обратный отсчет (Integer.parseInt (args [0])), 'line do? – user1940007

+2

@ user1940007: Аргумент 'args' для' main' является массивом аргументов командной строки, как экземпляры 'String'. 'args [0]' - первый аргумент командной строки, как 'String'. [Метод Integer.parseInt] (http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt%28java.lang.String%29) анализирует, что 'String 'как целое число base-10 и возвращает' int'. Итак, 'countdown (Integer.parseInt (args [0]))' анализирует первый аргумент командной строки как целое число base-10 и вызывает с ним 'countdown'. (Попробуйте запустить вашу программу как «java Blastoff 10', и вы поймете, что я имею в виду.) – ruakh

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