2012-09-13 76 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