Бұл пост негізінен сұхбатқа дайындалып жатқандарға арналған. Міне, олар осындай басқатырғыштарды сұрағанды ұнатады. Шын мәнінде, тапсырманы циклдар мен шарттармен шешу оңайырақ және логикалық. Біздің ойымызша, кез келген JavaRush студенті Java синтаксисі квестінің төртінші деңгейінен кейін мұны істей алады . Бірақ жоғарыда аталған әдістердің басым көпшілігі 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 Collections квестінде (толықтығы үшін) қамтылған , бірақ іс жүзінде оны түсінуге және қолдануға болады (немесе пайдаланбайды... неге - тақырыпты зерделеу кезінде біле аласыз!) әлдеқайда ертерек, циклдарды зерттегеннен кейін бірден. және шартты секірулер.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();
}
}
Семафорлар – ресурсқа қол жеткізу үшін синхрондау құралы. Semaphore
Java тілінде семафорлар кітапханаарқылы ұсынылған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