JavaRush /Java Blog /Random-TL /Paano mag-print ng mga numero mula 1 hanggang 100 sa Java...

Paano mag-print ng mga numero mula 1 hanggang 100 sa Java nang walang mga loop at kundisyon?

Nai-publish sa grupo
Ang post na ito ay pangunahing inilaan para sa mga naghahanda para sa mga panayam. Dito nila gustong magtanong ng mga ganitong klaseng palaisipan. Sa katunayan, ang gawain sa kamay ay mas madali at mas lohikal na lutasin sa mga cycle at kundisyon. At sa tingin namin ay magagawa ito ng sinumang mag-aaral ng JavaRush pagkatapos ng ikaapat na antas ng Java Syntax quest . Ngunit ang karamihan sa mga pamamaraan sa itaas ay idinisenyo para sa mga "nakapasok na" sa Java Multithreading . Tandaan: Ito ay tungkol sa hindi direktang paggamit ng mga loop at kundisyon. Sa katunayan, ang mga ito ay tahasang "built in" sa karamihan ng mga solusyong nabanggit. Paano mag-print ng mga numero mula 1 hanggang 100 sa Java nang walang mga loop at kundisyon?  - 1
Marahil mayroon kang sariling solusyon sa problemang ito? Ibahagi sa mga komento!

Kaya, paraan 1: isulat lang ito!

Siyempre, ang unang bagay na pumapasok sa isip ng isang baguhan ay direktang paghahanap. Hindi makatwiran, ngunit simple at naiintindihan. Eksakto sa parehong paraan na nalutas namin ang mga problema sa mga unang antas ng 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"
);
Ngunit, dapat mong aminin, ito ay kahit papaano mayamot. Samakatuwid, maaari mong gamitin ang pangalawang paraan.

Paraan 2: gumamit ng mga string at i-override saString

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

    }
Isinasaad ng anotasyon @Overridena i-o-override natin ang isang base class method. Sa kasong ito kami ay overriding toString. Sa katunayan, ito, tulad ng halos lahat ng mga sumusunod na solusyon, ay naglalaman ng mga loop. Ang mga siklo na ito ay binuo lamang sa mga pamamaraang ginamit.

Paraan 3: gumamit ng recursion

Upang maunawaan ang recursion, kailangan mong maunawaan ang recursion. Ang recursion, o isang function na tumatawag sa sarili nito, ay isang napaka-kawili-wiling paksa, at hindi palaging naiintindihan kaagad. Sa JavaRush ito ay sakop sa Java Collections quest (para sa pagkakumpleto), ngunit sa katunayan maaari itong maunawaan at magamit (o hindi ginagamit... bakit - malalaman mo habang pinag-aaralan ang paksa!) mas maaga, kaagad pagkatapos ng pag-aaral ng mga loop at conditional jumps.
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
    }

}
Tandaan:dito ang output ay ginawa hindi sa direkta, ngunit sa reverse order. Subukang baguhin ang code upang ang mga numero ay maipakita tulad ng nakasaad sa kundisyon, iyon ay, mula 1 hanggang 100. Naghihintay kami ng mga solusyon sa mga komento!

Paraan 4: gumamit ng mga semaphore

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();
    }
}
Ang mga semaphore ay isang paraan ng pag-synchronize para sa pag-access ng isang mapagkukunan. Sa Java, ang mga semaphore ay kinakatawan ngSemaphoreaklatanjava.util.concurrent.

Paraan 5: gumamit ng mga thread

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

Paraan 6: Alamin ang iyong mga aklatan!

Ang Java ay may maraming kawili-wiling bagay. Halimbawa, klase java.util.BitSet. Ito ay nagpapahintulot sa iyo na lumikha ng isang bit vector na ang laki ay nagbabago nang pabago-bago. Iyon ay, ang isang bagay ng klase BitSetay isang tiyak na nakaayos na hanay ng mga bit na may mga halaga trueo false. Sa una lahat ng mga bit ay pantay false. Upang iimbak ang set, ang halaga ng memorya na kinakailangan upang maiimbak ang vector hanggang sa pinaka makabuluhang bit na itinakda o i-reset sa programa ay inilalaan - lahat ng mga bit na lumampas dito ay itinuturing na pantay 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);
    }
}

Paraan 7: Gamitin ang Vector class

Oo, ang klase ng vector ay hindi na ginagamit at napakadalang gamitin. Gayunpaman, bakit hindi?
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);
  }
}
Batay sa mga materyales mula sa Quora
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION