2011-12-19 28 views
6

Guarda il codice qui sotto e per favore aiutami a risolvere il problema.Programma Java ingannevole

class TestTrick{ 

    public static void main(String args[]) 
    { 

    } 

    static marker() 
    { 

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

    } 

} 

Il risultato richiesto da questo programma è che il programma deve stampare program executed, il che significa che il metodo deve essere eseguito. Ma ci sono alcune regole:

  1. Nulla deve essere scritto in entrambi i metodi.
  2. Nessun'altra classe può essere aggiunta al programma.
  3. Il programma deve eseguire l'istruzione di uscita nel metodo marcatore.

Sono passati tre giorni e non sono in grado di risolvere il problema perché non sono un programmatore Java. Ho cercato tutto su internet per avere un'idea, ma ho fallito. Per favore, qualcuno mi aiuti a eseguire questo programma seguendo rigorosamente le regole.

+0

forse cambiare i nomi delle funzioni: p? o meglio, basta commentare la fine del primo e l'inizio del secondo metodo! – Anthea

+0

Se questo è un compito, contrassegnalo come uno. – Hurda

+4

Questo non verrà compilato. – MByD

risposta

18

Penso che quello che stanno cercando è un static initializer.

static { 
    marker(); 
} 

Viene eseguito quando la classe viene caricata.

4

Il problema è che non si desidera un metodo per il marcatore - si desidera solo un blocco di inizializzazione statica:

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) { 

    } 

} 

Risultati: http://ideone.com/bQAgT

Se hai fornito il codice già (che non sono sicuro che tu abbia perché static marker() non è un codice valido) allora puoi semplicemente chiamare marker() dal tuo blocco static.

+0

Questa risposta non soddisfa * 3. il programma deve eseguire la dichiarazione di output nel metodo marker *. tuttavia produce lo stesso output – Brad

+0

@Brad l'intero set di vincoli non era molto chiaro. Dato che il codice fornito nell'OP non è stato compilato, ho dovuto fare alcune supposizioni su ciò che era e non era effettivamente corretto. Credo di aver coperto i due casi più probabili nella mia risposta. – corsiKa

+0

Questo è un buon commento al ricevitore, e non ho annotato la tua risposta. Stavo solo commentando. – Brad

1

Questo è facile. Nella classe aggiungi un costruttore statico per chiamare il metodo marker e poi nel costruttore inserisci un system.exit

+1

"Non è necessario scrivere nulla in entrambi i metodi." Inoltre, perché avresti bisogno di un 'System.exit()'? Il programma finirà da solo. –

-2

Avresti bisogno di chiamare il metodo marker nel metodo main ie; qualcosa di simile:

class testTrick { 

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

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

} 
+1

"Nulla deve essere scritto in entrambi i metodi." –

2

è possibile utilizzare l'inizializzatore statico, che verrà eseguito prima dell'esecuzione del metodo Main.

static { 
    marker(); 
} 
+1

Non un "costruttore statico", ma un blocco statico. –

+0

Il mio male, l'ho corrisposto a – Hurda

2

Il blocco static farà il trucco per voi. Ma hai un errore di sintassi nel tuo programma. Poiché è un metodo, deve avere un tipo restituito. Sto assumendo 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

un programma ancora più complicato è

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

Nota: indicatore deve fornire un tipo di ritorno per esempio void o non verrà compilato. Puoi mantenere il metodo main() se vuoi, ma non viene mai chiamato.

L'inizializzatore statico viene chiamato prima del metodo principale in modo che possa chiamare un altro metodo e può uscire prima che venga visualizzato un messaggio che indica che non è stato trovato il metodo main().

0

Questo seguire le tue regole?, La creazione di un blocco statico sarà sempre eseguito in quanto viene memorizzato insieme ai file di classe e doen bisogno di un metodo principale per chiamare

class TestTrick{ 

    public static void main(String args[]) 
    { 

    } 

    static marker() 
    { 

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

    } 

} 
+0

oops, sembra rispondere a una domanda che ha già gli stessi ans, beh potrebbe essere una piccola spiegazione che aiuta, anche se è una vecchia domanda –

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"); 

} 

Guarda i requisiti. Puoi fare tutto ciò che vuoi purché tu non modifichi i metodi.

Quindi è necessario un blocco statico (che verrà sempre eseguito in un programma). Non è un metodo, e puoi chiamare il numero marker() da lì (che deve essere assegnato a un tipo di reso)