2012-09-13 45 views
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方法中的所有代码,但我不能从静态主要方法访问堆类...任何想法?

+0

“拉”?!谁拉了一堆? –

回答

0

试试这个:

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

你应该多解释一下错误。您的答案被标记为低质量。 –

+0

哦,我认为这只是一个愚蠢的错误,你无法弄清楚。你的评论表明你对java很陌生。 (你应该在你的问题中提到这一点)。您必须阅读这篇关于在java中创建对象的文章:http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html。长话短说:'新'必须跟着一个类名称,而不是方法名称。 –

0

啊这正好说明了只有两个班栈和stackTest,不存在所谓的stackStarter班组长,唯一的方法已在stackTest)定义,更改构造stackStarter(以stackTest ()在main(),并与对象调用的方法如下,将编译和做工精细,

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();  
    } 
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()是一个“方法”,而不是“类”。所以你简单地称它(而不是“新”)。

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

1

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

public static void main(String[] args){ 

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

} 

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