JavaRush /Blog Java /Random-FR /Comment imprimer des nombres de 1 à 100 en Java sans bouc...

Comment imprimer des nombres de 1 à 100 en Java sans boucles ni conditions ?

Publié dans le groupe Random-FR
Ce poste est principalement destiné à ceux qui se préparent aux entretiens. C'est là qu'ils aiment poser ce genre d'énigmes. En fait, la tâche à accomplir est plus facile et plus logique à résoudre avec des cycles et des conditions. Et nous pensons que n'importe quel étudiant JavaRush sera capable de le faire après le quatrième niveau de la quête Java Syntax . Mais la grande majorité des méthodes ci-dessus sont conçues pour ceux qui sont déjà « entrés » dans Java Multithreading . Remarque : Il s'agit de ne pas utiliser directement les boucles et les conditions. En fait, ils sont implicitement « intégrés » à la plupart des solutions mentionnées. Comment imprimer des nombres de 1 à 100 en Java sans boucles ni conditions ?  - 1
Peut-être avez-vous votre propre solution à ce problème ? Partagez dans les commentaires !

Alors, méthode 1 : écrivez-le !

Bien sûr, la première chose qui vient à l’esprit d’un débutant est la recherche directe. Irrationnel, mais simple et compréhensible. Exactement de la même manière que nous avons résolu les problèmes dans les premiers niveaux 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"
);
Mais, il faut l’admettre, c’est en quelque sorte ennuyeux. Par conséquent, vous pouvez utiliser la deuxième méthode.

Méthode 2 : utiliser des chaînes et remplacer 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));

    }
L'annotation @Overrideindique que nous allons remplacer une méthode de classe de base. Dans ce cas, nous annulons toString. En fait, comme presque toutes les solutions suivantes, elle contient des boucles. Ces cycles sont simplement intégrés aux méthodes utilisées.

Méthode 3 : utiliser la récursivité

Pour comprendre la récursivité, vous devez comprendre la récursivité. La récursivité, ou une fonction qui s'appelle elle-même, est un sujet très intéressant, et pas toujours immédiatement compréhensible. Sur JavaRush, il est abordé dans la quête Java Collections (pour être complet), mais en fait il peut être compris et utilisé (ou non utilisé... pourquoi - vous le découvrirez en étudiant le sujet !) bien plus tôt, immédiatement après avoir étudié les boucles et sauts conditionnels.
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
    }

}
Note:ici, la sortie ne se fait pas directement, mais dans l'ordre inverse. Essayez de changer le code pour que les chiffres s'affichent comme indiqué dans la condition, c'est-à-dire de 1 à 100. Nous attendons des solutions dans les commentaires !

Méthode 4 : utiliser des sémaphores

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();
    }
}
Les sémaphores sont un moyen de synchronisation pour accéder à une ressource. En Java, les sémaphores sont représentés par laSemaphorebibliothèquejava.util.concurrent.

Méthode 5 : utiliser des threads

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éthode 6 : Connaissez vos bibliothèques !

Java a beaucoup de choses intéressantes. Par exemple, la classe java.util.BitSet. Il permet de créer un vecteur de bits dont la taille change dynamiquement. Autrement dit, un objet de classe BitSetest un certain ensemble ordonné de bits avec des valeurs trueou false. Initialement, tous les bits sont égaux false. Pour stocker l'ensemble, la quantité de mémoire nécessaire pour stocker le vecteur jusqu'au bit le plus significatif qui a été défini ou réinitialisé dans le programme est allouée - tous les bits qui le dépassent sont considérés comme égaux 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éthode 7 : utiliser la classe Vector

Oui, la classe vector est obsolète et est extrêmement rarement utilisée. Pourtant, pourquoi pas ?
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);
  }
}
Basé sur des matériaux de Quora
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION