2015-06-17 2 views
1

Я новичок в понятиях java. при подготовке моей первой программы классов с объектами я столкнулся с проблемой. Вот код и error..please решительность .. ПРОГРАММА:Ошибка: главный метод не найден в классе java

class Fact 
{ 
    private int i; 
    private int n; 
    private int fact; 

    public Fact() 
     { fact=1; 
      i=1; 
     } 
    public Fact(int x) 
     { n=x; } 
    public void getAnswer() 
     { 
      while(i<=n) 
      {fact=fact*i; 
       i++;} 
      System.out.println(fact); 
     } 
} 
class FactMain 
{ 
    public static void main(String dt[]) 
    { 
    Fact obj= new Fact(6); 
    obj.getAnswer(); 
    } 
} 

ОШИБКА:

Main method not found in class Fact, please define the main method as: 
public static void main(String[] args) 
+1

Можете ли вы показать или описать, что вы делаете, и когда вы получите сообщение об ошибке. – Jens

+0

Ах, разве вы не должны пытаться запустить «FactMain», считая, что «FactMain» находится в «FactMain.class». Как вы выполняете программу? Класс 'FactMain' находится внутри' FactMain.java' отдельно от класса 'Fact'? – MadProgrammer

+0

, если вы хотите запустить программу, класс 'FactMain' должен быть' public', и вы должны запустить этот класс – Jens

ответ

0

Переименуйте имя файла класса Fact.java в FactMain.java.

private int fact; 

public Fact() 
    { fact=1; 
     i=1; 
    } 
public Fact(int x) 
    { n=x; } 

Обратите внимание, ваш конструктор по умолчанию установлен fact но конструктор Fact(int x) набор n. Следовательно, fact - 0. Таким образом, ваш выход - 0.

Решение:

public Fact(int x) { 
    fact = 1; 
    i = 1; 
    n = x; 
} 

Или

public Fact(int x) { 
    this(); // default constructor 
    n = x; 
} 

Вот полное решение:

Создать единый class файл с именем FactMain.java, а затем вставьте следующий код:

class Fact { 
    private int i; 
    private int n; 
    private int fact; 

    public Fact() { 
     fact = 1; 
     i = 1; 
    } 

    public Fact(int x) { 
     this(); 
     n = x; 
    } 

    public void getAnswer() { 
     while (i <= n) { 
      fact = fact * i; 
      i++; 
     } 
     System.out.println(fact); 
    } 
} 

class FactMain { 
    public static void main(String[] dt) { 
     Fact obj = new Fact(6); 
     obj.getAnswer(); 
    } 
} 
+0

показывает результат как 0. кроме переименования я могу просто запустить java FactMain –

+0

try..didnt work..i не отделял их. сохраненный файл как FileMain.java .. javac FileMain.java .. java FileMain .. вывод 0 –

+1

получил это. спасибо много .. конструктор противоречил –

0

Вы сохранили файл в Fact.java. Поэтому java пытается найти основной класс в Fact. Сохраните файл как FactMain.java Он должен работать.

+0

Учитывая тот факт, что невозможно определить, где фактически находятся «Fact» и «FactMain», это беспорядок, который нуждается в разъяснении. Я не вижу, как переименование файла Fact.java, который содержит публичный класс 'Fact' для' FactMain.java', все равно разрешит проблему (но пока я довольно смущен) – MadProgrammer

0

Ваш главный метод в FactMain.java, но вы сохраняете файл как Fact.java.

Вам нужно будет сохранить файл как FactMain.java, как JVM ожидает главный быть в том же классе, что и имя файла .java.

+0

'FactMain', а не 'FaceMain'. И просто переименование «Факт» в «FactMain» не является реальным решением, поскольку оно «похоже» также содержит «public Fact», поэтому лучшим решением было бы разделить их на собственные Java-файлы ... IMHO – MadProgrammer

+0

кроме переименования, я могу просто запустить FactMain, так как он содержит объект класса Fact –

+0

Если вы объявили класс FactMain в другом файле FactMain.java, и у вас есть файл Fact.java в том же классе, который будет работать нормально. В противном случае вам нужно будет переименовать файл как FactMain.java. JVM ищет общедоступный статический основной метод в том же классе, что и основной метод. –

0

Вы определили свой основной класс в FactMain и, скорее всего, после компиляции во время работы вы пытаетесь выполнить

java Fact

И, следовательно, вы получили ошибку, потому что нет основного метода в классе фактов. После компиляции файл .java вы получите два класс файлов Fact.class и FactMain.class, так что вы должны выполнить

java FactMain

0

Перемещение FactMain класса FactMain.java

FactMain.Java

public class FactMain 
{ 
    public static void main(String dt[]) 
    { 
     Fact obj= new Fact(6); 
     obj.getAnswer(); 
    } 
} 

Разрешить Fact класс оставаться в файле Fact.java

Fact.java

public class Fact { 

    private int i; 
    private int n; 
    private int fact; 

    public Fact() { 
     fact = 1; 
     i = 1; 
    } 

    public Fact(int x) { 
     this(); 
     n = x; 
    } 

    public void getAnswer() { 
     while (i <= n) { 
      fact = fact * i; 
      i++; 
     } 
     System.out.println(fact); 
    } 
} 

Компиляция классы ...

javac {package path}\FactMain.java 

Выполнить главный класс

java {package path}.FactMain 
+0

попытался .. отделил код .. в одном файле Факт, который содержит членов .. в другом файле FileMain, который содержит объект .. сохранил их как File.java и FileMain.java .. на cmd javac File.java, тогда Javac FileMain.java..then java FileMain .. output 0 –

+0

конструктор по умолчанию был конфликтующим .. решение от @ rakeb, void сработало –

+0

как получилось i == 0 .. если System.out.println показывает 0, то его потому что фактографическая переменная получает значение 0 после концов цикла –

1

просто изменить параметризованный конструктор этого

public Fact(int x) { 
    fact = 1; 
    i = 1; 
    n = x; 
} 

, потому что вы объявляете факторного в конструкторе по умолчанию и вы не называя его. Итак, присвоен факториалу, а затем вы пытаетесь его умножить. Это не имеет смысла.

+0

не работает .. хотя ваша концепция правильная .. правильный метод public Fact (int x) {i = 1; Факт = 1; n = x;} отлично работает –

+0

Да, это работает bwoy !!!! @SitanshuKhosla – Hiru

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