Реализация стека в Java: ошибка основной функции - PullRequest
0 голосов
/ 25 декабря 2018

Я объявил класс main, где я вызываю функцию main.Я прокомментировал основную функцию в Class Stack, так как я вызываю функции push и pop в классе Main.Я поднял код и вижу ошибку.

КОД:

public class Stack {

    //public static void main(String[] args) {
        // TODO Auto-generated method stub
        static final int max = 10;
        int top = -1;
        int a[]= new int[max];

        static void push(int data)
        {   
            if (top>=max -1)
                    System.out.println("OVerflow");
            else
                    a[++top]= data;
        }
        static int pop()
        {   
            if (top<0)
                    System.out.println("Empty Stack");
            else
                    {int x = a[--top];
                    return x;
        }

        }
}
        //}
class main {
    public static void main(String[] args) {
        Stack s = new Stack();
        s.push(10);
        s.push(20);
        s.pop();
        s.push(9);
        s.pop();
        for (i =0; i< 10;i++)
        { 
            System.out.println(a[i]);
        }               
    }
}

ОШИБКА:

Error: Main method not found in class Stack, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

Ответы [ 5 ]

0 голосов
/ 25 декабря 2018

У вас есть несколько проблем, которые нужно сначала исправить, чтобы ваш код компилировался.

Вы используете объект класса Stack с помощью Stack s = new Stack();, поэтому вам don't нужно, чтобы ваши push() и pop() методы были static, поэтому избавьтесь от static из объявления метода,Это будет выглядеть как

void push(int data)
{
    if (top>=max -1)
        System.out.println("OVerflow");
    else
        a[++top]= data;
}

Другая проблема - ваш pop() метод.Вы указали тип возврата int.поэтому он всегда должен возвращать int.Последняя строка ваших методов должна содержать возвращаемое значение, равное int.Поэтому вам следует изменить значение pop() на что-то вроде

int pop() {
    int poppedValue = 0;
    if (top < 0)
        System.out.println("Empty Stack");
    else {
        poppedValue = a[--top];
    }

    return poppedValue;
}

Ваш класс main не имеет доступа к int[] a класса Stack, однако вы пытаетесь повторить его.Вы можете добавить метод в ваш класс Stack, чтобы он возвращал вам массив int[] a.

public int[] getStack() {
    return a;
}

Так что после push() и pop() в вашем методе main() вы можете получить массив

int [] a = s.getStack();

Ваша последняя проблема в цикле for.Вы должны указать тип данных i.поэтому ваш цикл должен выглядеть следующим образом.

    int [] a = s.getStack();
    for (int i =0; i< 10;i++)
    {
        System.out.println(a[i]);
    }

Также обратите внимание, что вы получаете a array от Stack объекта s ваше тело цикла сможет получить доступ к a[i] ранее, этобыла бы ошибка компиляции.

0 голосов
/ 25 декабря 2018

Это еще одно возможное решение, включая метод main в вашем общедоступном классе 'Stack'.Кроме того, вы используете статические методы, вам нужны глобальные статические переменные.

public class Stack {
// public static void main(String[] args) {
// TODO Auto-generated method stub
static final int max = 10;
static int top = -1;
static int a[] = new int[max];

static void push(int data) {
    if (top >= max - 1)
        System.out.println("OVerflow");
    else
        a[++top] = data;
}

static int pop() {
    if (top < 0)
        System.out.println("Empty Stack");
    else {
        int x = a[--top];
        return x;
    }
    return 0;

}

public static void main(String[] args) {
    // Stack s = new Stack();
    push(10);
    push(20);
    pop();
    push(9);
    pop();
    for (int i = 0; i < 10; i++) {
        System.out.println(a[i]);
    }
}
}

Вывод: 10 9 0 0 0 0 0 0 0 0

0 голосов
/ 25 декабря 2018

Причина возникновения ошибки заключается в том, что вам нужно сообщить компилятору, где находится метод main.Вам нужно найти опцию запуска конфигураций в вашем редакторе, и оттуда заставить его запускать Main, а не Stack.Я использую Eclipse IDE.

Eclipse: https://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftasks-java-local-configuration.htm

Intellij: https://intellij -support.jetbrains.com / hc / en-us / community / posts / 115000156824-Как выбрать основной класс

Фиксированный код, ФИНАЛ:

package foo;

public class Stack {

    private final int max = 10;
    private int top = -1;
    private int a[] = new int[max];

    public int[] getA() {
         return a;
    }

    public void push(int data) {
        if (top >= max - 1)
            System.out.println("OVerflow");
        else
            a[++top] = data;
        }

    public int pop() {
        if (top < 0)
            System.out.println("Empty Stack");
        else {
            int x = a[--top];
            return x;
        }
        return top;
    }
}

class Main {
    public static void main(String[] args) {
        Stack s = new Stack();
        s.push(10);
        s.push(20);
        s.pop();
        s.push(9);
        s.pop();

        int[] a = s.getA();

        for (int i = 0; i < 10; i++) {
            System.out.println(a[i]);
        }
    }
}
0 голосов
/ 25 декабря 2018

ваш код работает после изменения спецификатора доступа к классу и , устраняющего несколько ошибок .(Я использую затмение)

class Stack {

    static final int max = 10;
    static int top = -1;
    static int a[] = new int[max];

    static void push(int data) {
        if (top >= max - 1)
            System.out.println("OVerflow");
        else
            a[++top] = data;
    }

    static int pop() {
        int x = 0;
        if (top < 0)
            System.out.println("Empty Stack");
        else {
            x = a[--top];
            return x;
        }
        return x;

    }
}

class main {
    public static void main(String[] args) {
        Stack s = new Stack();
        s.push(10);
        s.push(20);
        s.pop();
        s.push(9);
        s.pop();
        for (int i = 0; i < 10; i++) {
            System.out.println(s.a[i]);
        }
    }
}
0 голосов
/ 25 декабря 2018

Вам нужно разместить метод main внутри открытого класса.Поэтому либо сделайте класс main общедоступным, либо класс Stack по умолчанию, либо переместите метод main в класс Stack и избавьтесь от основного класса.

Первое решение:

class Stack{
   //...
}

public class Main{

    public static void main(String[] args){

    }
}

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

public class Stack {
    //...
    public static void main(String[] args){

    }
}

См. Также: Что если метод main находится внутри "не публичного класса" файла Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...