JavaRush /Blog Java /Random-PL /Jak wydrukować liczby od 1 do 100 w Javie bez pętli i war...

Jak wydrukować liczby od 1 do 100 w Javie bez pętli i warunków?

Opublikowano w grupie Random-PL
Ten post jest przeznaczony przede wszystkim dla osób przygotowujących się do rozmów kwalifikacyjnych. To tutaj lubią zadawać tego typu zagadki. W rzeczywistości zadanie jest łatwiejsze i bardziej logiczne do rozwiązania za pomocą cykli i warunków. Uważamy, że każdy uczeń JavaRush będzie w stanie to zrobić po ukończeniu czwartego poziomu zadania Java Syntax . Ale zdecydowana większość powyższych metod jest przeznaczona dla tych, którzy już „weszli” w wielowątkowość Java . Uwaga: chodzi o to, aby nie używać bezpośrednio pętli i warunków. W rzeczywistości są one domyślnie „wbudowane” w większość wspomnianych rozwiązań. Jak wydrukować liczby od 1 do 100 w Javie bez pętli i warunków?  - 1
Być może masz własne rozwiązanie tego problemu? Podziel się w komentarzach!

Zatem metoda 1: po prostu napisz!

Oczywiście pierwszą rzeczą, która przychodzi na myśl początkującemu, jest wyszukiwanie bezpośrednie. Nieracjonalne, ale proste i zrozumiałe. Dokładnie w ten sam sposób rozwiązaliśmy problemy na pierwszych poziomach 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"
);
Ale trzeba przyznać, że jest to w jakiś sposób nudne. Dlatego możesz zastosować drugą metodę.

Metoda 2: użyj ciągów i zastąp 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));

    }
Adnotacja @Overridewskazuje, że zamierzamy zastąpić metodę klasy bazowej. W tym przypadku nadpisujemy toString. W rzeczywistości to, podobnie jak prawie wszystkie poniższe rozwiązania, zawiera pętle. Cykle te są po prostu wbudowane w stosowane metody.

Metoda 3: użyj rekurencji

Aby zrozumieć rekurencję, musisz zrozumieć rekurencję. Rekurencja, czyli wywoływanie samej funkcji, to bardzo interesujący temat i nie zawsze od razu zrozumiały. W JavaRush jest to omówione w zadaniu Java Collections (dla kompletności), ale tak naprawdę można to zrozumieć i wykorzystać (lub nie wykorzystać... dlaczego - dowiesz się, studiując temat!) znacznie wcześniej, zaraz po przestudiowaniu pętli i skoki warunkowe.
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);				// вызов метода со oznaczającyм 100
    }

}
Notatka:tutaj wyjście nie jest wykonywane bezpośrednio, ale w odwrotnej kolejności. Spróbuj zmienić kod tak, aby wyświetlały się liczby zgodne z warunkiem, czyli od 1 do 100. Czekamy na rozwiązania w komentarzach!

Metoda 4: użyj semaforów

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();
    }
}
Semafory to środki synchronizacji umożliwiające dostęp do zasobu. W Javie semafory są reprezentowane przezSemaphorebibliotecznąjava.util.concurrent.

Metoda 5: użyj wątków

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

Metoda 6: Poznaj swoje biblioteki!

Java ma wiele ciekawych rzeczy. Na przykład klasa java.util.BitSet. Pozwala na utworzenie wektora bitowego, którego wielkość zmienia się dynamicznie. Oznacza to, że obiekt klasy BitSetto pewien uporządkowany zestaw bitów o wartościach truelub false. Początkowo wszystkie bity są równe false. Do przechowywania zestawu przydzielana jest ilość pamięci potrzebna do przechowywania wektora aż do najbardziej znaczącego bitu, który został ustawiony lub zresetowany w programie - wszystkie bity przekraczające tę wartość są uważane za równe 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);
    }
}

Metoda 7: Użyj klasy Vector

Tak, klasa wektorów jest przestarzała i jest używana niezwykle rzadko. Dlaczego nie?
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);
  }
}
Na podstawie materiałów Quora
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION