Java中的堆栈实现:主要功能错误

时间:2018-12-24 21:04:13

标签: java data-structures stack

我已经声明了一个main类,在其中我正在调用main函数。我在类Main中调用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 :(得分:0)

发生错误的原因是您需要告诉编译器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-How-to-choose-main-class

固定代码FINAL:

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]);
        }
    }
}

答案 1 :(得分:0)

您的代码在更改类访问说明消除了一些错误之后才能工作。 (我正在使用eclipse)

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]);
        }
    }
}

答案 2 :(得分:0)

这是另一种可能的解决方案,包括公共类“ Stack”中的main方法。另外,您在使用静态方法,则需要全局静态变量。

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

答案 3 :(得分:0)

您需要先解决一些问题,以便编译代码。

您正在使用Stack的{​​{1}}类的对象,因此Stack s = new Stack();需要将don'tpush()方法设置为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类的Stack,但是您尝试遍历它。您可以在int[] a类中添加一个方法以返回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编译错误。

答案 4 :(得分:-1)

您需要将main方法放置在公共类中。因此,要么使class main成为公共类,而使Stack类成为默认访问权限,要么将main方法移入Stack类内部并处置main类。

第一个解决方案:

class Stack{
   //...
}

public class Main{

    public static void main(String[] args){

    }
}

第二种解决方法:

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

    }
}

另请参阅:What if main method is inside "non public class" of java file?