JavaRush /Blogue Java /Random-PT /Como imprimir números de 1 a 100 em Java sem loops e cond...

Como imprimir números de 1 a 100 em Java sem loops e condições?

Publicado no grupo Random-PT
Esta postagem é destinada principalmente a quem está se preparando para entrevistas. É aqui que eles gostam de fazer esse tipo de quebra-cabeça. Na verdade, a tarefa em questão é mais fácil e lógica de resolver com ciclos e condições. E achamos que qualquer aluno JavaRush será capaz de fazer isso após o quarto nível da missão Java Syntax . Mas a grande maioria dos métodos acima são projetados para quem já “entrou” no Java Multithreading . Nota: Trata-se de não usar loops e condições diretamente. Na verdade, eles estão implicitamente “incorporados” na maioria das soluções mencionadas. Como imprimir números de 1 a 100 em Java sem loops e condições?  - 1
Talvez você tenha sua própria solução para esse problema? Compartilhe nos comentários!

Então, método 1: basta escrever!

Claro, a primeira coisa que vem à mente de um iniciante é a pesquisa direta. Irracional, mas simples e compreensível. Exatamente da mesma forma que resolvemos problemas nos primeiros níveis do 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"
);
Mas, você deve admitir, é um tanto chato. Portanto, você pode usar o segundo método.

Método 2: use strings e substitua 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));

    }
A anotação @Overrideindica que substituiremos um método da classe base. Neste caso estamos substituindo toString. Na verdade, esta, como quase todas as soluções a seguir, contém loops. Acontece que esses ciclos estão incorporados aos métodos usados.

Método 3: use recursão

Para entender a recursão, você precisa entender a recursão. A recursão, ou uma função que chama a si mesma, é um tópico muito interessante e nem sempre imediatamente compreensível. No JavaRush ele é abordado na busca Java Collections (para ser completo), mas na verdade ele pode ser entendido e usado (ou não usado... por que - você descobrirá enquanto estuda o tópico!) muito antes, imediatamente após estudar os loops e saltos condicionais.
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);				// вызов метода со meaningм 100
    }

}
Observação:aqui a saída não é feita em ordem direta, mas na ordem inversa. Experimente alterar o código para que os números sejam exibidos conforme indicado na condição, ou seja, de 1 a 100. Aguardamos soluções nos comentários!

Método 4: use 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();
    }
}
Os semáforos são um meio de sincronização para acessar um recurso. Em Java, os semáforos são representados pelaSemaphorebibliotecajava.util.concurrent.

Método 5: use tópicos

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: Conheça suas bibliotecas!

Java tem muitas coisas interessantes. Por exemplo, classe java.util.BitSet. Ele permite criar um vetor de bits cujo tamanho muda dinamicamente. Ou seja, um objeto de classe BitSeté um determinado conjunto ordenado de bits com valores trueou false. Inicialmente todos os bits são iguais false. Para armazenar o conjunto, é alocada a quantidade de memória necessária para armazenar o vetor até o bit mais significativo que foi definido ou redefinido no programa - todos os bits que o excedem são considerados iguais 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: use a classe Vector

Sim, a classe vetorial está obsoleta e raramente é usada. Ainda assim, por que não?
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);
  }
}
Baseado em materiais do Quora
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION