JavaRush /Blog Java /Random-VI /Làm cách nào để in các số từ 1 đến 100 trong Java mà khôn...

Làm cách nào để in các số từ 1 đến 100 trong Java mà không cần vòng lặp và điều kiện?

Xuất bản trong nhóm
Bài đăng này chủ yếu dành cho những người chuẩn bị cho cuộc phỏng vấn. Đây là nơi họ thích hỏi những câu đố kiểu này. Trên thực tế, nhiệm vụ hiện tại sẽ dễ dàng và hợp lý hơn để giải quyết bằng các chu trình và điều kiện. Và chúng tôi nghĩ rằng bất kỳ sinh viên JavaRush nào cũng có thể làm được điều này sau cấp độ thứ tư của nhiệm vụ Cú pháp Java . Nhưng phần lớn các phương pháp trên được thiết kế dành cho những người đã “nhập” vào Java Multithreading . Lưu ý: Đây là về việc không sử dụng trực tiếp các vòng lặp và điều kiện. Trên thực tế, chúng được ngầm “tích hợp” vào hầu hết các giải pháp được đề cập. Làm cách nào để in các số từ 1 đến 100 trong Java mà không cần vòng lặp và điều kiện?  - 1
Có lẽ bạn có giải pháp riêng cho vấn đề này? Chia sẻ trong các ý kiến!

Vì vậy, phương pháp 1: chỉ cần viết nó!

Tất nhiên, điều đầu tiên người mới bắt đầu nghĩ đến là tìm kiếm trực tiếp. Vô lý nhưng đơn giản và dễ hiểu. Chính xác giống như cách chúng tôi giải quyết vấn đề ở cấp độ đầu tiên của 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"
);
Tuy nhiên, bạn phải thừa nhận, nó có phần nhàm chán. Vì vậy, bạn có thể sử dụng phương pháp thứ hai.

Cách 2: sử dụng chuỗi và ghi đè 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));

    }
Chú thích @Overridecho biết rằng chúng ta sẽ ghi đè một phương thức của lớp cơ sở. Trong trường hợp này, chúng tôi đang ghi đè toString. Trên thực tế, giải pháp này, giống như hầu hết các giải pháp sau đây, đều chứa các vòng lặp. Các chu trình này được tích hợp đơn giản vào các phương pháp được sử dụng.

Cách 3: sử dụng đệ quy

Để hiểu đệ quy, bạn cần hiểu đệ quy. Đệ quy, hay một hàm gọi chính nó, là một chủ đề rất thú vị và không phải lúc nào cũng có thể hiểu được ngay lập tức. Trên JavaRush, nó được đề cập trong nhiệm vụ Bộ sưu tập Java (để hoàn thiện), nhưng trên thực tế, nó có thể được hiểu và sử dụng (hoặc không được sử dụng... tại sao - bạn sẽ tìm ra khi nghiên cứu chủ đề này!) sớm hơn nhiều, ngay sau khi nghiên cứu các vòng lặp và các bước nhảy có điều kiện.
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
    }

}
Ghi chú:ở đây đầu ra không được thực hiện trực tiếp mà theo thứ tự ngược lại. Hãy thử thay đổi mã sao cho các số được hiển thị như đã nêu trong điều kiện, tức là từ 1 đến 100. Chúng tôi đang chờ giải pháp trong phần bình luận!

Cách 4: sử dụng ngữ nghĩa

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();
    }
}
Semaphores là một phương tiện đồng bộ hóa để truy cập tài nguyên. Trong Java, các ẩn dụ được biểu diễn bằngSemaphorethư việnjava.util.concurrent.

Cách 5: sử dụng 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);
    }
}

Phương pháp 6: Biết thư viện của bạn!

Java có rất nhiều điều thú vị. Ví dụ: lớp java.util.BitSet. Nó cho phép bạn tạo một vectơ bit có kích thước thay đổi linh hoạt. Nghĩa là, một đối tượng lớp BitSetlà một tập hợp các bit có thứ tự nhất định với các giá trị truehoặc false. Ban đầu tất cả các bit đều bằng nhau false. Để lưu trữ tập hợp, lượng bộ nhớ cần thiết để lưu trữ vectơ lên ​​đến bit quan trọng nhất đã được đặt hoặc đặt lại trong chương trình sẽ được phân bổ - tất cả các bit vượt quá nó đều được coi là bằng nhau 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);
    }
}

Cách 7: Sử dụng lớp Vector

Có, lớp vectơ đã lỗi thời và cực kỳ hiếm khi được sử dụng. Tuy nhiên, tại sao không?
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);
  }
}
Dựa trên tài liệu từ Quora
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION