JavaRush /Java Blog /Random-KO /루프와 조건 없이 Java에서 1부터 100까지의 숫자를 인쇄하는 방법은 무엇입니까?

루프와 조건 없이 Java에서 1부터 100까지의 숫자를 인쇄하는 방법은 무엇입니까?

Random-KO 그룹에 게시되었습니다
이번 포스팅은 면접을 준비하는 분들을 위한 포스팅입니다. 이곳은 그들이 이런 종류의 퍼즐을 묻기를 좋아하는 곳입니다. 실제로 당면한 작업은 주기와 조건을 사용하여 해결하는 것이 더 쉽고 논리적입니다. 그리고 우리는 JavaRush를 공부하는 학생이라면 누구나 Java 구문 퀘스트 의 4단계 이후에 이를 수행할 수 있을 것이라고 생각합니다 . 그러나 위의 방법 중 대다수는 이미 Java Multithreading을 "입력"한 사람들을 위해 설계되었습니다 . 참고: 이는 루프와 조건을 직접 사용하지 않는 것에 관한 것입니다. 실제로 언급된 대부분의 솔루션에 암시적으로 "내장"되어 있습니다. 루프와 조건 없이 Java에서 1부터 100까지의 숫자를 인쇄하는 방법은 무엇입니까?  - 1
아마도 당신은 이 문제에 대한 자신만의 해결책을 가지고 있습니까? 댓글로 공유해주세요!

따라서 방법 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"
);
하지만 어쩐지 지루하다는 걸 인정해야 합니다. 따라서 두 번째 방법을 사용할 수 있습니다.

방법 2: 문자열을 사용하고 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. 실제로 여기에는 다음의 거의 모든 솔루션과 마찬가지로 루프가 포함되어 있습니다. 이러한 주기는 사용된 방법에 간단히 내장되어 있습니다.

방법 3: 재귀 사용

재귀를 이해하려면 재귀를 이해해야 합니다. 재귀 또는 자신을 호출하는 함수는 매우 흥미로운 주제이지만 항상 즉시 이해할 수 있는 것은 아닙니다. JavaRush 에서는 Java 컬렉션 퀘스트(완전성을 위해) 에서 다루지 만 실제로는 루프를 연구한 직후 훨씬 더 일찍 이해하고 사용할 수 있습니다(또는 사용하지 않을 수도 있습니다... 이유는 주제를 연구하는 동안 알게 될 것입니다!). 그리고 조건부 점프.
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까지 숫자가 표시되도록 코드를 변경해 보세요. 댓글에서 해결 방법을 기다리고 있습니다!

방법 4: 세마포어 사용

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.

방법 5: 스레드 사용

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

방법 6: 라이브러리를 알아보세요!

Java에는 흥미로운 것들이 많이 있습니다. 예를 들어 클래스 java.util.BitSet. 크기가 동적으로 변경되는 비트 벡터를 생성할 수 있습니다. 즉, 클래스 객체는 값이 또는 . BitSet인 특정 순서의 비트 집합입니다 . 처음에는 모든 비트가 동일합니다 . 세트를 저장하려면 프로그램에서 설정 또는 재설정된 최상위 비트까지 벡터를 저장하는 데 필요한 메모리 양이 할당됩니다. 이를 초과하는 모든 비트는 동일한 것으로 간주됩니다 . truefalsefalsefalse
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);
    }
}

방법 7: Vector 클래스 사용

예, 벡터 클래스는 더 이상 사용되지 않으며 극히 드물게 사용됩니다. 그래도 왜 안돼?
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