이번 포스팅은 면접을 준비하는 분들을 위한 포스팅입니다. 이곳은 그들이 이런 종류의 퍼즐을 묻기를 좋아하는 곳입니다. 실제로 당면한 작업은 주기와 조건을 사용하여 해결하는 것이 더 쉽고 논리적입니다. 그리고 우리는 JavaRush를 공부하는 학생이라면 누구나 Java 구문 퀘스트 의 4단계 이후에 이를 수행할 수 있을 것이라고 생각합니다 . 그러나 위의 방법 중 대다수는 이미 Java Multithreading을 "입력"한 사람들을 위해 설계되었습니다 . 참고: 이는 루프와 조건을 직접 사용하지 않는 것에 관한 것입니다. 실제로 언급된 대부분의 솔루션에 암시적으로 "내장"되어 있습니다.
아마도 당신은 이 문제에 대한 자신만의 해결책을 가지고 있습니까? 댓글로 공유해주세요! |
따라서 방법 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
인 특정 순서의 비트 집합입니다 . 처음에는 모든 비트가 동일합니다 . 세트를 저장하려면 프로그램에서 설정 또는 재설정된 최상위 비트까지 벡터를 저장하는 데 필요한 메모리 양이 할당됩니다. 이를 초과하는 모든 비트는 동일한 것으로 간주됩니다 . 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);
}
}
방법 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의 자료를 기반으로 함
GO TO FULL VERSION