类混乱,编写堆栈模拟器

时间:2012-09-13 04:16:03

标签: java oop

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

    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方法访问堆栈类......有什么想法吗?

4 个答案:

答案 0 :(得分:1)

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

public static void main(String[] args){

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

}

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

答案 1 :(得分:0)

试试这个:

public static void main(String[] args)
{
    stackTest TEST = new stackTest();
    TEST.stackStarter();
}

答案 2 :(得分: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();    
    }

答案 3 :(得分: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()也需要是静态的。