2016-04-22 4 views
-3
public static int f(String input) { 

    public static Stack<Character> stack = new Stack<Character>(); 

     int n = 0; 

     for (int i = 0; i < input.length(); i++) { 

       if (input.charAt(i) == 'd') 
         stack.push('d'); 

       else if (input.charAt(i) == 'b') { 

         if (!stack.empty() && stack.pop() == 'd') n++; 
       } 
     } 

     return n; 
} 

私はうまく動作しないこと、@azurefrogが言うようにちょうどここスタティックはオブジェクトの作成において何を表していますか?

+4

A構文エラー?そのような静的なローカル変数を宣言することはできません。コンパイルされません。 – azurefrog

+1

最初の2行を何とか逆にしてもよろしいですか? – azurefrog

+2

'static'キーワードは、最初の2行を反転させてそのコードをコンパイルしたとしても、' Stack'の*オブジェクト作成*に何も意味しません。フィールドstackの範囲に何か意味がありますが、 'new Stack ()'コールには何の影響もありません。 – Andreas

答えて

0

他の人が今まで述べてきたことはすべて正確ですが、私はあなたの疑問を少し詳しく説明します。「obの静的キーワードの重要性「創造」とは

静的変数は、クラスの存続期間中存続します(基本的に、プログラムの最初から最後まで)。しかし、あなたのコードでは、スタック変数をメソッドの中に宣言するので、そのメソッドが実行されるたびに変数が作成され、破棄されます。したがって、キーワードstaticを与えるのは実際には意味をなさない。これらの変数は、作成するクラスのすべてのインスタンス間で共有されることを意図しています。そのため、プログラムを実行するときに一度しか静的変数を作成しないでください。学習するときに

ここ

私は重宝カップルされている(ここで、静的使用するとき/他の場所で説明する資源のトンがあります):

+0

リンクありがとう! – abhinav

0

を全体のコードを貼り付け...オブジェクトの作成中にstaticキーワードの重要性を知りたい - 私はあなたがコピーした推測しています線を貼り付けてください。

public static Stack<Character> stack = new Stack<Character>(); 

説明の目的から、もしそうなら、あなたはそうすることであなたの例を壊しました。

静的メソッドではなく、クラス内からの宣言であると仮定すると、数値に関係なく、変数stackのインスタンスは1つだけになりますクラスを作成するすべてのインスタンスには、stackの同じインスタンスが表示されます(ただし、公開されていると仮定すると、外部からアドレス指定されている場所)。 ClassName.stackというとinstanceName.stack

関連する問題