0

我在尝试实现一个简单的面向对象程序时遇到了一些严重的问题。我有一个堆栈类定义如下...

    import java.io.*;
    public class stack
    {
        // instance variables - replace the example below with your own
        private int maxStack;
        private int emptyStack;
        private int top;
        private int[] stack;


        public stack(int size)
        {        
            maxStack = size;
            emptyStack = -1;
            top = emptyStack;
            stack = new int[maxStack];
        }

        public int push(int y)
        {
            top++;
            stack[top]= y;
            return 0;
        }

        public int pull(int y){
            int temp = top;
            top--;
            return stack[temp];    
        }

        public boolean isEmpty(){
            return top == emptyStack;
        }

        public void print(){
            for(int i =top;i<0;i--){
                System.out.println("Position "+top+" "+stack[top]);
            }

        }

    }

I am trying to reference this class from another class that I am calling...


     import java.io.*;

     public class stackTest
      {

       public void stackStarter(){

            System.out.println("Welcome to our Stack Simulator");
            InputStreamReader ir = new InputStreamReader(System.in);
            BufferedReader bf = new BufferedReader(ir);
            System.out.print("Enter number of elements : ");
            String str = bf.readLine();
            int num = Integer.parseInt(str);
            stack testStack = new stack(num);
            int test =5;
            testStack.push(test);



        }

        public static void main(String[] args){

          stackStarter TEST = new stackStarter();

        }


    }

我不断收到错误...找不到符号 - 类 stackStarter。我尝试将 stackStarter 方法中的所有代码放在 main 中,但我无法从静态 main 方法访问 stack 类......有什么想法吗?

4

4 回答 4

1

您应该实例化类而不是方法。你的main方法应该是这样的:

public static void main(String[] args){

    stackTest test = new stackTest();
    test.stackStarter();

}

还有一件事,您应该在编写代码时遵循 Java 命名约定。egstackTest不是根据 Java 命名标准的有效类名,它应该是StackTest.

于 2012-09-13T04:22:10.430 回答
0

尝试这个:

public static void main(String[] args)
{
    stackTest TEST = new stackTest();
    TEST.stackStarter();
}
于 2012-09-13T04:20:13.633 回答
0

是的,它确切显示只有两个类 stack 和 stackTest ,没有称为 stackStarter 的类,只有方法已在 stackTest 中定义,将构造函数 stackStarter() 更改为 main() 中的 stackTest() 并使用对象调用方法如下它会编译并且可以正常工作,

public class stackTest
      {

       public void stackStarter(){

            System.out.println("Welcome to our Stack Simulator");
            InputStreamReader ir = new InputStreamReader(System.in);
            BufferedReader bf = new BufferedReader(ir);
            System.out.print("Enter number of elements : ");
            String str = bf.readLine();
            int num = Integer.parseInt(str);
            stack testStack = new stack(num);
            int test =5;
            testStack.push(test);

        }

        public static void main(String[] args){

          stackTest TEST = new stackTest();
           TEST.stackStarter();    
    }
于 2012-09-13T04:21:02.617 回答
0

请试试这个:

public class stackTest
{

   static void stackStarter(){

        System.out.println("Welcome to our Stack Simulator");
        InputStreamReader ir = new InputStreamReader(System.in);
        BufferedReader bf = new BufferedReader(ir);
        System.out.print("Enter number of elements : ");
        String str = bf.readLine();
        int num = Integer.parseInt(str);
        stack testStack = new stack(num);
        int test =5;
        testStack.push(test);



    }

    public static void main(String[] args){
      stackStarter();
    }

}

主要的“陷阱”是您希望 stackStarter() 成为“方法”,而不是“类”。因此,您只需调用它(而不是“新”)。

第二个“陷阱”是“main()”是一个静态类。所以如果你想从 main() 调用 stackStarter(),那么 starckStarter() 也需要是静态的。

于 2012-09-13T04:21:13.117 回答