2011-12-19 19 views
6

Mira el siguiente código y ayúdame a resolver el truco.Tricky Java program

class TestTrick{ 

    public static void main(String args[]) 
    { 

    } 

    static marker() 
    { 

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

    } 

} 

El resultado deseado de este programa es que el programa debe imprimir program executed, lo que significa que el método debe ser ejecutado. Pero hay algunas reglas:

  1. No debe escribirse nada en ambos métodos.
  2. No se puede agregar ninguna otra clase al programa.
  3. El programa debe ejecutar la instrucción de salida en el método de marcador.

Han pasado tres días y no puedo resolver el problema porque no soy un programador de Java. He buscado todo en Internet para obtener una pista pero he fallado. Por favor, Alguien me ayude a ejecutar este programa siguiendo estrictamente las reglas.

+0

quizás cambie los nombres de las funciones: p? o mejor, ¡simplemente comente el final del primer y el comienzo del segundo método! – Anthea

+0

Si esto es una tarea, márcalo como uno. – Hurda

+4

Esto no se compilará. – MByD

Respuesta

18

Creo que lo que están buscando es un static initializer.

static { 
    marker(); 
} 

Esto se ejecuta cuando se carga la clase.

4

El problema es que no desea un método para su marcador - lo que desea es un bloque de inicialización estática:

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

    } 

} 

Resultados: http://ideone.com/bQAgT

Si se te ha proporcionado el código ya (que no estoy seguro de que tenga porque static marker() no es un código válido), entonces simplemente puede llamar al marker() desde su bloque static.

+0

Esta respuesta no satisface * 3. el programa debe ejecutar la declaración de salida en el método de marcador *. sin embargo, produce la misma salida – Brad

+0

@Brad, las restricciones de conjunto no eran muy claras. Dado que el código proporcionado en el OP no compilaba, tuve que hacer algunas suposiciones sobre lo que era y no era correcto en los hechos. Creo que he cubierto los dos casos más probables en mi respuesta. – corsiKa

+0

Ese es un brillo de comentarios justo, y no marqué tu respuesta. Solo estaba comentando sobre eso. – Brad

1

Esto es fácil. En la clase, agregue un constructor estático para llamar al método marcador y luego en el constructor ponga en un system.exit

+1

"No se debe escribir nada en ambos métodos". Además, ¿por qué necesitarías un 'System.exit()'? El programa terminará solo. –

-2

Debería llamar al método marcador en el método principal; algo como esto:

class testTrick { 

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

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

} 
+1

"No se debe escribir nada en ambos métodos". –

2

puede utilizar inicializador estático, que será ejecutado antes de que el método principal se puede ejecutar.

static { 
    marker(); 
} 
+1

No es un "constructor estático", sino un bloque estático. –

+0

Malo, lo he corresionado – Hurda

2

El bloque static hará el truco para usted. Pero tienes un error de sintaxis en tu programa. Como es un método, debe tener un tipo de devolución. Estoy asumiendo 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 programa aún más complicado es

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

Nota: marcador tiene que proporcionar un tipo de retorno, por ejemplo, void o no compilará. Puede mantener el método main() si lo desea, pero nunca se llama.

El inicializador estático se llama antes que el método principal, por lo que puede llamar a otro método y puede salir antes de que aparezca un mensaje que indica que no se ha encontrado el método main().

0

qué esto siga sus reglas?, Creando un bloque estático siempre va a ejecutar, ya que se almacena junto con los archivos de clase y doen necesita un método principal para llamar

class TestTrick{ 

    public static void main(String args[]) 
    { 

    } 

    static marker() 
    { 

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

    } 

} 
+0

oops, parece que ha respondido una pregunta que ya tiene la misma pregunta, bien puede ser una pequeña explicación ayuda, aunque es una vieja pregunta –

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

} 

Mire los requisitos. Puede hacer lo que quiera siempre que no altere los métodos.

Por lo tanto, se necesita un bloque estático (que siempre se ejecutará en un programa). No es un método, y puede llamar al marker() desde allí (que por cierto se le debe asignar un tipo de devolución)