2016-12-01 8 views
0

私は、JavaのStackを使用して文字列値をプッシュしようとしています。その名前は、Scannerメソッドからの入力から派生しています。私はその後、スタックから名前をポップしたいと思った後、スタックの論理的および物理的な要素を表示します。私はArray Stackを使うべきだと思っていますが、Stacksについての質問や経験はあまりないので、完全にはわかりません。文字列要素でJavaスタックを使用する

現在、Stack.javaファイルをコンパイルするときに次のエラーが発生しています。

Stack.java:24: cannot find symbol 
symbol : method push(java.lang.String) 
location: class java.lang.String[] 
stack.push(s); 

私はこれを調査し、日ごとに異なるコードをしようと、私はこれに非常に新しいです、と私はそれを動作させるためのコードを操作する方法がなくなってきたようにしてきました。

私はいくつかのアドバイスに感謝します... tnx!一般的に、私は、スタック内のメソッドを呼び出し、

import java.lang.*; 
import java.util.*; 

public class Stack { //Create Class 

     private String stack[] ; 
     private int top; 
     private static final int SIZE = 5; 
     String name; 
     Scanner scan = new Scanner(System.in); 

     public Stack(int SIZE){ 
      stack = new String [SIZE]; 
      top = 0; 
     } 

    public void push(String s) { //Method to Insert 

     if (isStackFull()) 
      System.out.println ("Stack is Full "); //If Stack full Print Full 
     else { 
      while (scan.hasNextLine()){ 
       s = scan.nextLine(); 
       stack.push(s); 
      } 
       stack[top] = s; 
       top++;  
     } 
    } 

    public String pop() { //Method to Delete 

     if (isStackEmpty()) 
      System.out.println ("Stack is Empty "); //If Stack empty print Empty 
     else{ 
      String value = stack[top]; 
      top--; 
      return value; 
     } 
     return stack[top]; 
    } 

    public String toString(){  //Method print Logical Stack 
      if (isStackEmpty()) 
       System.out.println ("Stack is Empty "); //If Stack empty print Empty 
      else 
       System.out.println("\nThe Stack"); 
       String result = ""; 

       for (int j=0; j < top; j++) 

        result = result + stack[j].toString() + "\n"; 

       return result; 
    } 

    public boolean isStackEmpty() { //Method boolean type to check empty Stack 
     return (top == 0); 
    } 

    public boolean isStackFull() {  //Method boolean type to check full Stack 
     return (top == (SIZE-1)); 
    } 
} 

StackTestコードの場合:

は、ここに私のStackクラスのコードです。例えば。コメント付きのコードに以下に示すように

public class StackTest { //Create class 
    public static void main(String[] args){  //Main Method 
     Stack n = new Stack(); //Declare variables 
     Scanner in = new Scanner(System.in); 
     String response;       
     char x; 

とあなたのpush(String s)ある方法が間違っているStringpush()呼びかけている

while(x != 'q' && x != 'Q'){  //While loop initiates if no q or Q char input 

       switch(x){      //Start of swtich for insert, delete, print physical, logical or default quite 
        case 'i':     
         n.push();      
         System.out.println ("Inserted item from Stack"); 
         break; 
        case 'd': 
         n.pop(); 
         System.out.println ("Deleted item from Stack"); 
         break; 
        case 'p': 
         n.toString(); 
         System.out.println ("Printed Physical Stack "); 
         break; 
+0

'stack'は' push'メソッドを持たないString配列です。 – shmosel

+0

スレッドセーフティが不要な 'Stack'実装が必要な場合は、[' ArrayDeque'](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayDeque.html)より好ましい。 – 4castle

答えて

1

、さらにpush(String s)ためのロジックではなく、それは簡単ですが、複雑である:

public void push(String s) { 
    if (isStackFull()) 
     System.out.println ("Stack is Full "); //If Stack full Print Full 
    else { 
     stack[top] = s; //just add the string to the top of the stack 
     top++; //increment top 
    } 
} 
0

pushメソッド自体では、stack.pushを呼び出そうとしているため、エラーがスローされています。 stack.pushを置き換えて[top_index] =文字列をスタックします。

+0

Tnx all!私はあなたの推薦を試みます。 – ksdst1

+0

Ok ... tnx。 pushメソッドでstack.push(s)呼び出しを削除し、コンパイルエラーを解決しました。今私は理解していないStackTestでコンパイルエラーがあります。それは私のスイッチステートメントでハングアップします:n.push() – ksdst1

+0

Tnx。 pushメソッドでstack.push(s)呼び出しを削除し、コンパイルエラーを修正しました。今私はStackTestでコンパイルエラーがあります。その私のスイッチステートメントで:n.push()と私はすべてのn.Xステートメントを想定しています。上記のように、Stack n = new Stack()、次にn.push()を実行します。新しいスタックnを宣言しようとしていますが、これはスキャナメソッドから入力された名前をスタックにプッシュします。なぜそれがコンストラクタStack()を見つけることができないのか分かりません。 Stack.javaではStackコンストラクタを取得できましたか?私はSIZE = 5要素に制限された文字列のスタックを構築したかったのです。 – ksdst1

関連する問題