JavaRush /مدونة جافا /Random-AR /كيفية طباعة الأرقام من 1 إلى 100 في جافا بدون حلقات وشروط...

كيفية طباعة الأرقام من 1 إلى 100 في جافا بدون حلقات وشروط؟

نشرت في المجموعة
هذا المنشور مخصص في المقام الأول لأولئك الذين يستعدون للمقابلات. هذا هو المكان الذي يحبون طرح هذه الأنواع من الألغاز فيه. في الواقع، المهمة المطروحة أسهل وأكثر منطقية لحلها مع الدورات والشروط. ونعتقد أن أي طالب في JavaRush سيكون قادرًا على القيام بذلك بعد المستوى الرابع من مهمة Java Syntax . لكن الغالبية العظمى من الأساليب المذكورة أعلاه مصممة لأولئك الذين "دخلوا" بالفعل إلى Java Multithreading . ملاحظة: يتعلق هذا بعدم استخدام الحلقات والشروط مباشرةً. في الواقع، فهي ضمنيًا "مدمجة" في معظم الحلول المذكورة. كيفية طباعة الأرقام من 1 إلى 100 في جافا بدون حلقات وشروط؟  - 1
ربما لديك الحل الخاص بك لهذه المشكلة؟ شارك في التعليقات!

لذا، الطريقة الأولى: فقط اكتبها!

وبطبيعة الحال، أول ما يتبادر إلى ذهن المبتدئ هو البحث المباشر. غير عقلانية، ولكنها بسيطة ومفهومة. تمامًا بنفس الطريقة التي حللنا بها المشكلات في المستويات الأولى من 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"
);
لكن يجب أن تعترف بأن الأمر ممل إلى حد ما. لذلك، يمكنك استخدام الطريقة الثانية.

الطريقة الثانية: استخدام السلاسل وتجاوز 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));

    }
يشير التعليق التوضيحي @Overrideإلى أننا سنقوم بتجاوز طريقة الفئة الأساسية. في هذه الحالة نحن نتغلب toString. في الواقع، هذا، مثل جميع الحلول التالية تقريبًا، يحتوي على حلقات. تم دمج هذه الدورات ببساطة في الأساليب المستخدمة.

الطريقة الثالثة: استخدام العودية

لفهم العودية، تحتاج إلى فهم العودية. يعد التكرار، أو الدالة التي تطلق على نفسها، موضوعًا مثيرًا للاهتمام للغاية، وليس دائمًا مفهومًا على الفور. في JavaRush ، تمت تغطيته في مهمة Java Collections (للاكتمال)، ولكن في الواقع يمكن فهمه واستخدامه (أو عدم استخدامه... لماذا - ستكتشف ذلك أثناء دراسة الموضوع!) قبل ذلك بكثير، مباشرة بعد دراسة الحلقات والقفزات المشروطة.
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
    }

}
ملحوظة:هنا لا يتم الإخراج بشكل مباشر، ولكن بترتيب عكسي. حاول تغيير الكود بحيث تظهر الأرقام كما هو موضح في الحالة أي من 1 إلى 100. ننتظر الحلول في التعليقات!

الطريقة الرابعة: استخدام الإشارات

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();
    }
}
الإشارات هي وسيلة مزامنة للوصول إلى المورد. في Java، يتم تمثيل الإشارات بواسطةSemaphoreالمكتبةjava.util.concurrent.

الطريقة الخامسة: استخدام المواضيع

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

الطريقة السادسة: تعرف على مكتباتك!

جافا لديها الكثير من الأشياء المثيرة للاهتمام. على سبيل المثال، الطبقة java.util.BitSet. يسمح لك بإنشاء ناقل بت يتغير حجمه ديناميكيًا. أي أن كائن الفئة BitSetعبارة عن مجموعة مرتبة معينة من البتات ذات القيم trueأو false. في البداية جميع البتات متساوية false. لتخزين المجموعة، يتم تخصيص مقدار الذاكرة المطلوبة لتخزين المتجه حتى البت الأكثر أهمية الذي تم تعيينه أو إعادة تعيينه في البرنامج - تعتبر جميع البتات التي تتجاوزها متساوية 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);
    }
}

الطريقة السابعة: استخدم فئة المتجهات

نعم، فئة المتجه قديمة ونادرًا ما يتم استخدامها. ومع ذلك، لماذا لا؟
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);
  }
}
بناءً على مواد من موقع Quora
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION