JavaRush /Blog Java /Random-ES /¿Cómo imprimir números del 1 al 100 en Java sin bucles ni...

¿Cómo imprimir números del 1 al 100 en Java sin bucles ni condiciones?

Publicado en el grupo Random-ES
Esta publicación está destinada principalmente a quienes se preparan para entrevistas. Aquí es donde les gusta plantear este tipo de acertijos. De hecho, la tarea que nos ocupa es más fácil y lógica de resolver con ciclos y condiciones. Y creemos que cualquier estudiante de JavaRush podrá hacer esto después del cuarto nivel de la misión de Sintaxis de Java . Pero la gran mayoría de los métodos anteriores están diseñados para aquellos que ya han "entrado" en Java Multithreading . Nota: Se trata de no utilizar bucles y condiciones directamente. De hecho, están implícitamente “integrados” en la mayoría de las soluciones mencionadas. ¿Cómo imprimir números del 1 al 100 en Java sin bucles ni condiciones?  - 1
¿Quizás tenga su propia solución a este problema? ¡Comparte en los comentarios!

Entonces, método 1: ¡simplemente escríbelo!

Por supuesto, lo primero que le viene a la mente a un principiante es la búsqueda directa. Irracional, pero simple y comprensible. Exactamente de la misma manera que resolvimos problemas en los primeros niveles de JavaRush.
System.out.println("1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 ,
21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 ,
43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 ,
65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , 96 ,
97 , 98 , 99 , 100"
);
Pero debes admitir que es algo aburrido. Por lo tanto, puedes utilizar el segundo método.

Método 2: usar cadenas y anular toString

public static void main(String[] args) {

        Object[] numbers = new Object[100];
        Arrays.fill(numbers, new Object() {    //создаем анонимный класс
            private int count = 0;
            @Override
            public String toString() {
                return Integer.toString(++count);
            }
        });
        System.out.println(Arrays.toString(numbers));

    }
La anotación @Overrideindica que vamos a anular un método de clase base. En este caso estamos anulando toString. De hecho, esta, como casi todas las siguientes soluciones, contiene bucles. Estos ciclos simplemente están integrados en los métodos utilizados.

Método 3: usar recursividad

Para comprender la recursividad, es necesario comprender la recursividad. La recursividad, o una función que se llama a sí misma, es un tema muy interesante y no siempre se entiende de inmediato. En JavaRush está cubierto en la búsqueda de Colecciones de Java (para que esté completo), pero de hecho se puede entender y usar (o no usar... por qué, ¡lo descubrirás mientras estudias el tema!) mucho antes, inmediatamente después de estudiar los bucles. y saltos condicionales.
public class Recursion {

    public void ShowNums(int i) {
    // метод, который печатает

        int x = 1;

// блок try проверяет, достигли ли мы нуля
        try {
            int m = x / i;				// здесь выбрасывается исключение при i = 0
            System.out.println(i);
            i--;
            ShowNums(i);				// а вот и рекурсивный вызов
        }
        catch(ArithmeticException e) {
		// деление на нуль выбрасывает ArithmeticException
            return;					// Останавливается при попытке деления на нуль
        }

    }

     public static void main(String[] args) {

        Recursion r = new Recursion();
        r.ShowNums(100);				// вызов метода со significadoм 100
    }

}
Nota:aquí la salida no se realiza en orden directo, sino en orden inverso. Intente cambiar el código para que los números se muestren como se indica en la condición, es decir, del 1 al 100. ¡Estamos esperando soluciones en los comentarios!

Método 4: usar semáforos

public class To100 {
    public static void main(String[] args) {
        final int max = 100;
        new java.util.concurrent.Semaphore(max) {
            void go() {
                acquireUninterruptibly();
                System.err.println(max-availablePermits());
                go();
            }
        }.go();
    }
}
Los semáforos son un medio de sincronización para acceder a un recurso. En Java, los semáforos están representados por laSemaphorede bibliotecajava.util.concurrent.

Método 5: usar hilos

public class Counter extends Thread{

    private int cnt;

    public Counter(){
        this.cnt = 0;
    }

    private void increment(){
        System.out.println(cnt++);
        try{
            Thread.sleep(1000);
        }catch(Exception e){}
        increment();
    }

    public void run(){
        increment();
    }

    public static void main(String[] args) throws Exception{
        Counter cntr = new Counter();
        cntr.start();
        cntr.join(100000);
        cntr.interrupt();
        System.exit(0);
    }
}

Método 6: ¡Conozca sus bibliotecas!

Java tiene muchas cosas interesantes. Por ejemplo, clase java.util.BitSet. Le permite crear un vector de bits cuyo tamaño cambia dinámicamente. Es decir, un objeto de clase BitSetes un determinado conjunto ordenado de bits con valores trueo false. Inicialmente todos los bits son iguales false. Para almacenar el conjunto, se asigna la cantidad de memoria necesaria para almacenar el vector hasta el bit más significativo que se configuró o restableció en el programa; todos los bits que lo excedan se consideran iguales false.
public class To100 {
    public static void main(String[] args) {
        String set = new java.util.BitSet() {{ set(1, 100+1); }}.toString();
        System.out.append(set, 1, set.length()-1);
    }
}

Método 7: utilizar la clase Vector

Sí, la clase de vector está obsoleta y se usa muy raramente. Aún así, ¿por qué no?
import java.util.Vector;

public class PrintOneToHundered {
  static int i;
  PrintOneToHundered() {}
  public String toString() { return ++i+""; }
  public static void main(String[] args) {
    Vector v1  =new Vector(); v1  .add(new PrintOneToHundered());
    Vector v2  =new Vector(); v2  .addAll(v1 ); v2  .addAll(v1 );
    Vector v4  =new Vector(); v4  .addAll(v2 ); v4  .addAll(v2 );
    Vector v8  =new Vector(); v8  .addAll(v4 ); v8  .addAll(v4 );
    Vector v16 =new Vector(); v16 .addAll(v8 ); v16 .addAll(v8 );
    Vector v32 =new Vector(); v32 .addAll(v16); v32 .addAll(v16);
    Vector v64 =new Vector(); v64 .addAll(v32); v64 .addAll(v32);
    Vector v100=new Vector(); v100.addAll(v64); v100.addAll(v32); v100.addAll(v4);
    System.out.println(v100);
  }
}
Basado en materiales de Quora
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION