Kiriman iki utamane kanggo sing nyiapake wawancara. Iki ngendi padha seneng takon jinis iki teka-teki. Nyatane, tugas sing ditindakake luwih gampang lan luwih logis kanggo diatasi kanthi siklus lan kahanan. Lan kita mikir manawa siswa JavaRush bakal bisa nindakake iki sawise tingkat papat saka pencarian Java Syntax . Nanging akèh-akèhé saka cara ing ndhuwur dirancang kanggo wong-wong sing wis "mlebu" Java Multithreading . Cathetan: Iki babagan ora nggunakake puteran lan kahanan langsung. Ing kasunyatan, padha implicitly "dibangun menyang" paling saka solusi kasebut.
Mungkin sampeyan duwe solusi dhewe kanggo masalah iki? Nuduhake ing komentar! |
Dadi, cara 1: mung nulis!
Mesthine, bab pisanan sing ana ing pikiran pamula yaiku telusuran langsung. Ora rasional, nanging prasaja lan bisa dingerteni. Persis cara sing padha kita ngrampungake masalah ing tingkat pisanan 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");
Nanging, sampeyan kudu ngakoni, iki pancen mboseni. Mulane, sampeyan bisa nggunakake cara liya.
Cara 2: gunakake strings lan timpa 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 kasebut @Override
nuduhake yen kita bakal ngilangi metode kelas dasar. Ing kasus iki kita overriding toString
. Nyatane, iki, kaya meh kabeh solusi ing ngisor iki, ngemot puteran. Siklus iki mung dibangun ing metode sing digunakake.
Cara 3: nggunakake rekursi
Kanggo mangerteni rekursi, sampeyan kudu ngerti rekursi. Recursion, utawa fungsi nelpon dhewe, iku topik menarik banget, lan ora tansah langsung dingerteni. Ing JavaRush, ana ing quest Java Collections (kanggo jangkep), nanging nyatane bisa dingerteni lan digunakake (utawa ora digunakake ... kenapa - sampeyan bakal ngerti nalika sinau topik kasebut!) luwih awal, sanalika sawise sinau loop. lan mlumpat kondisional.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
}
}
Cathetan:kene output digawe ora langsung, nanging ing urutan mbalikke. Coba ganti kode kasebut supaya nomer kasebut ditampilake ing kondisi kasebut, yaiku, saka 1 nganti 100. Kita nunggu solusi ing komentar! |
Cara 4: nggunakake semaphore
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 minangka sarana sinkronisasi kanggo ngakses sumber daya. Ing Jawa, semaphore diwakili deningSemaphore
perpustakaanjava.util.concurrent
.
Cara 5: Gunakake 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);
}
}
Cara 6: Ngerti perpustakaan sampeyan!
Jawa iku akeh perkara sing menarik. Contone, kelasjava.util.BitSet
. Ngidini sampeyan nggawe vektor bit sing ukurane diganti kanthi dinamis. Yaiku, obyek kelas BitSet
minangka set bit sing diurutake kanthi nilai true
utawa false
. Kaping pisanan kabeh bit padha false
. Kanggo nyimpen set kasebut, jumlah memori sing dibutuhake kanggo nyimpen vektor nganti bit paling pinunjul sing disetel utawa direset ing program diparengake - kabeh bit sing ngluwihi iku dianggep padha 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);
}
}
Cara 7: Gunakake kelas Vektor
Ya, kelas vektor wis lungse lan arang banget digunakake. Isih, kok ora?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);
}
}
Adhedhasar bahan saka Quora
Apa maneh sing kudu diwaca: |
---|
Top 10 Pustaka Jawa kanggo Ngirit Wektu Buku paling apik kanggo Nyiyapake kanggo Ujian OCAJP8 (1Z0-808) Jawa 8 |
GO TO FULL VERSION