Posting ini terutama ditujukan bagi mereka yang mempersiapkan wawancara. Di sinilah mereka suka menanyakan teka-teki semacam ini. Faktanya, tugas yang ada lebih mudah dan logis untuk diselesaikan dengan siklus dan kondisi. Dan menurut kami setiap siswa JavaRush akan dapat melakukan ini setelah pencarian Sintaks Java tingkat keempat . Tetapi sebagian besar metode di atas dirancang untuk mereka yang sudah “memasuki” Java Multithreading . Catatan: Ini tentang tidak menggunakan loop dan kondisi secara langsung. Faktanya, mereka secara implisit “dibangun ke dalam” sebagian besar solusi yang disebutkan.
Mungkin Anda punya solusi sendiri untuk masalah ini? Bagikan di komentar! |
Jadi, metode 1: tulis saja!
Tentu saja hal pertama yang terlintas di benak seorang pemula adalah pencarian langsung. Tidak rasional, tetapi sederhana dan dapat dimengerti. Persis dengan cara yang sama kami memecahkan masalah di JavaRush tingkat pertama.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");
Tapi, harus Anda akui, itu membosankan. Oleh karena itu, Anda bisa menggunakan cara kedua.
Metode 2: gunakan string dan ganti 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));
}
Anotasi @Override
menunjukkan bahwa kita akan mengganti metode kelas dasar. Dalam hal ini kami mengesampingkan toString
. Faktanya, ini, seperti hampir semua solusi berikut, mengandung loop. Siklus ini secara sederhana dimasukkan ke dalam metode yang digunakan.
Metode 3: gunakan rekursi
Untuk memahami rekursi, Anda perlu memahami rekursi. Rekursi, atau fungsi yang memanggil dirinya sendiri, adalah topik yang sangat menarik, dan tidak selalu dapat dimengerti dengan segera. Di JavaRush itu tercakup dalam pencarian Java Collections (untuk kelengkapan), namun sebenarnya dapat dipahami dan digunakan (atau tidak digunakan... mengapa - Anda akan mengetahuinya saat mempelajari topik!) jauh lebih awal, segera setelah mempelajari loop dan lompatan bersyarat.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
}
}
Catatan:di sini keluarannya tidak dibuat secara langsung, tetapi dalam urutan terbalik. Coba ubah kodenya agar angka yang ditampilkan sesuai kondisi yaitu dari 1 menjadi 100. Kita tunggu solusinya di kolom komentar! |
Metode 4: gunakan semafor
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();
}
}
Semaphore adalah sarana sinkronisasi untuk mengakses sumber daya. Di Java, semaphore diwakili olehSemaphore
perpustakaanjava.util.concurrent
.
Metode 5: gunakan utas
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);
}
}
Metode 6: Kenali perpustakaan Anda!
Java memiliki banyak hal menarik. Misalnya kelasjava.util.BitSet
. Ini memungkinkan Anda membuat vektor bit yang ukurannya berubah secara dinamis. Artinya, objek kelas BitSet
adalah sekumpulan bit terurut tertentu dengan nilai true
atau false
. Awalnya semua bit sama false
. Untuk menyimpan himpunan, jumlah memori yang diperlukan untuk menyimpan vektor hingga bit paling signifikan yang disetel atau disetel ulang dalam program dialokasikan - semua bit yang melebihinya dianggap sama 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);
}
}
Metode 7: Gunakan kelas Vector
Ya, kelas vektor sudah usang dan jarang digunakan. Namun mengapa tidak?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);
}
}
Berdasarkan materi dari Quora
Apa lagi yang harus dibaca: |
---|
10 Perpustakaan Java Teratas untuk Menghemat Waktu Buku Terbaik untuk Mempersiapkan Ujian OCAJP8 (1Z0-808) Java 8 |
GO TO FULL VERSION