2014-10-17 4 views
-2

Могу ли я и как я могу вызвать основной метод из другого метода в Java? Пожалуйста, объясните, используя код ниже:Вызов главного метода Java

public class arraysAndMethods { 

public void printArray(double[] arr) { 
    int x = public arraysAndMethods.main(int[] studGrades); 
    // pass array in main mehthod to other methods 
    //int a=main(args[]); 
    for (int i = 0; i < studGrades.lenght; i++) 
     System.out.print(studGrades[i] + " "); 
}// end of printArray method 
public static void main(String args[]){ 


    java.util.Scanner input = new java.util.Scanner(System.in); // input scanner 

    System.out.println("What is the size of the class?"); 
    int n = input.nextInt(); 

    double studGrades[] = new double[n]; 

    for (int i = 0; i < studGrades.length;i++) { 
     System.out.println("What is the grade of student #" + (i+1)); 
     studGrades[i] = input.nextDouble(); 
    } // end of for loop 


}// end of main method 
}//end of class 

ПОСЛЕ EDIT:

Я понял это для прохождения в аргументах, за исключением. Использовать ли возвращаемое значение из основного? А так как возвращаемое значение из main - это массив, должны ли параметры для вызова main иметь скобки? Должна ли быть разница между этими скобками?

public class arraysAndMethods { 
public void printArray(double[] arr) { 
    int x = arraysAndMethods.main(double[i] arr);//error with paremeters 
    for (int i = 0; i < studGrades.lenght; i++) 
     System.out.print(studGrades[i] + " "); 
}// end of printArray method 
public static double[] main(String args[]){// double array 
    java.util.Scanner input = new java.util.Scanner(System.in); // input scanner 
    System.out.println("What is the size of the class?"); 
    int n = input.nextInt(); 
    double[] arr = new double[n];// declare and initialize array to have n many elements 
    for (int i = 0; i < arr.length;i++) {// input grades for each students 
     System.out.println("What is the grade of student #" + (i+1)); 
     arr[i] = input.nextDouble(); 
    } // end of for loop 
    return arr; 
}// end of main method 
}// end of class 
+1

Это еще один метод: 'arraysAndMethods.main (new String [] {" foo "," bar "})' ... –

+2

Зачем вам это нужно? – Wabonano

+1

Просто выбросьте это; если вы не выполняете какую-то странную загрузку или операцию загрузки/управления, вы должны ** ** ** напрямую вызывать метод 'main'. – Qix

ответ

0

Да, вы можете вызвать метод main() из другого метода. Я сделал это во время модульных тестов, чтобы посмотреть, как это работает.

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

arraysAndMethods.main(/* parameters here */); 

с имитацией «аргументы командной строки», переданных в качестве параметра.

FYI, это стандартная практика Java, чтобы начать название класса с большой буквы.

+0

Это не работает, вам нужно передать массив String в качестве параметров. –

+0

Я написал, что «имитируемые аргументы командной строки» должны быть переданы как параметр. Редактирование, чтобы уточнить это. –

+0

Также теоретически можно вызвать метод main() без каких-либо параметров, если программа может обрабатывать вызов без аргументы командной строки. –

1

Обычно считается неправильной практикой программирования для вызова основного метода из другого метода. Это может привести к целому списку проблем, таких как бесконечные циклы, бесконечная рекурсия и т. Д. Ваш основной метод должен включать в себя функции высокого уровня, которые необходимо использовать вашей программе, обычно вы хотите, чтобы это было так просто, как вы можете ее сохранить. Как хороший вид «проверки» спросите себя, могу ли я сделать эту функциональность в своем собственном отдельном методе? Если да, то почему бы не сделать это? Затем, если вам когда-нибудь понадобится сделать этот звонок, у вас есть отдельный способ сделать это.

0

Это можно назвать другим способом. В printArray() (например), вы можете сделать это:

String[] someArgs= new String[] {"monkey"}; 
arraysAndMethods.main(someArgs); 

Как это статический метод arrayAndMethods класса не должен быть создан.