2011-12-19 8 views
6

以下のコードを見て、私がこのトリックを解決するのを助けてください。トリッキーなJavaプログラム

class TestTrick{ 

    public static void main(String args[]) 
    { 

    } 

    static marker() 
    { 

    System.out.println("programe executed"); 

    } 

} 

このプログラムから必要な結果は、プログラムがメソッドが実行されなければならないことを意味し、 program executedを印刷しなければならないことです。しかし、いくつかの規則があります:

  1. どちらの方法でも記述する必要はありません。
  2. 他のクラスはプログラムに追加できません。
  3. プログラムは、マーカーメソッドでoutputステートメントを実行する必要があります。

私はJavaプログラマではないため、3日後に問題を解決できません。私は手がかりを得るためにインターネット上のすべてを検索しましたが、失敗しました。 誰かがこのルールを厳守してこのプログラムを実行するのを手伝ってください。

+0

多分関数の名前を切り替える:p? 2つ目のメソッドの最初と最後のコメントだけをコメントしてください。 – Anthea

+0

これが宿題の場合は、それを1とマークします。 – Hurda

+4

これはコンパイルされません。 – MByD

答えて

18

彼らが探しているものはstatic initializerだと思います。

static { 
    marker(); 
} 

これは、クラスがロードされると実行されます。

4

問題は、あなたのマーカーのための方法を望んでいないということです - あなただけの静的な初期化ブロックをしたい:

class Trick { 
    // not a method, just something to execute when the class is loaded 
    static { System.out.println("executed"); } 

    public static void main(String[] args) { 

    } 

} 

結果:http://ideone.com/bQAgT

すでにコードを提供してきた場合(static marker()が有効なコードではないため、あなたが持っているかどうかはわかりません)、staticブロックからmarker()と呼ぶことができます。

+0

この回答は* 3を満たしていません。プログラムはマーカーメソッド*の出力文を実行する必要があります。しかし、それは同じ出力を生成しません – Brad

+0

@ブラッド全体の制約はあまり明確ではありませんでした。 OPで提供されたコードがコンパイルされなかったことを考えると、私は実際に正しいかどうかについて何らかの前提を作らなければならなかった。私は、私の答えで2つの最も可能性の高いケースをカバーしていると信じています。 – corsiKa

+0

これは公正なコメントのグローコーダーです。私はあなたの答えに印を付けませんでした。私はちょうどそれにコメントしていた。 – Brad

1

これは簡単です。クラスでは、マーカーメソッドを呼び出すための静的コンストラクターを追加し、次に、system.exitに入れたコンストラクターに追加します。

+1

"どちらの方法でも記述する必要はありません。"さらに、なぜSystem.exit()が必要なのでしょうか?プログラムはそれ自身で終了します。 –

-2

メインメソッドでマーカーメソッドを呼び出す必要があります。

class testTrick { 

    public static void main(String args[]) { 
     marker(); 
    } 

    static void marker() { 
     System.out.println("programe executed"); 
    } 

} 
+1

"両方の方法で何も書かれてはいけません。" –

2

メインメソッドを実行する前に実行される静的初期化子を使用できます。

static { 
    marker(); 
} 
+1

"静的コンストラクタ"ではなく、静的ブロックです。 –

+0

私の悪い、私はそれをcorrecetd – Hurda

2

ブロックブロックはあなたのためのトリックを行います。しかし、プログラムに構文エラーがあります。 はメソッドであるため、戻り型が必要です。私はvoidと仮定しています。

class testTrick { 

    public static void main(String args[]) { 
    } 

    static void marker() { 
     System.out.println("programe executed"); 
    } 

    static { 
     marker(); 
    } 
} 
0
class testTrick 
{ 

    public static void main(String args[]) 
    { 
    } 

    static 
    { 
     marker(); 
    } 

    static void marker() 
    { 
     System.out.println("programe executed"); 
    } 
} 
1

アンでもトリッキープログラムは

class testTrick { 
    static { marker(); System.exit(0); } static void marker() { 
     System.out.println("program executed"); 
    } 
} 

。注:マーカーは、戻り値の型などを提供しなければなりませんvoidまたはコンパイルされません。必要に応じてmain()メソッドを保持できますが、呼び出されることはありません。

staticメソッドはmainメソッドの前に呼び出されるため、別のメソッドを呼び出すことができます。main()メソッドが見つからないというメッセージが表示される前に終了できます。

0

が、これはそれはクラスファイルと一緒に保存されますよう、静的なブロックが常に実行される作成し、?あなたのルールに従わず、それDOENがコールする主な方法が必要

class TestTrick{ 

    public static void main(String args[]) 
    { 

    } 

    static marker() 
    { 

    System.out.println("programe executed"); 

    } 

} 
+0

おっと、質問に答えているようだwchichはすでに同じansを持っている、よく、少しの説明が役立つかもしれないが、古い質問 –

0
public class M 
{ 
    public static void main(String[] args) 
    { 

    } 
    static 
    { 
     marker(); 
    } 
    public static void marker() 
    { 
     System.out.println("Done"); 
    } 
} 
-1
int i = 10 + + 11 - - 12 + + 13 - - 14 + + 15; 

System.out.println(i); 
0
class TestTrick{ 
public static void main(String args[]) 
{ 

} 

static{ 
    marker();} 
static void marker(){ 

System.out.println("programe executed"); 

} 

要件を見てください。メソッドを変更しない限り、任意の操作を行うことができます。

静的ブロック(常にプログラム内で実行される)が必要です。メソッドではなく、marker()から呼び出すことができます(戻り値の型を割り当てる必要があります)

関連する問題