Diskuze: Java - metoda join() - dotaz
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
A není to náhodou jeden z úkolů na ITnetworku? (nebo už nevím, těch
tutoriálů jsem dělal tolik, že v tom mám guláš).
Pak bych měl pár výhrad
No a teď tvůj problémek... Nevím, ale když už si hraješ s vlákny, tak
by nemusel být pro tebe takový problém s tím scannerem (obzvlášť, když
píšeš, že ho ovládáš
)
Jednoduše to nahraď třeba přípravou před samotnou logikou prográmku -
aneb 90% úvodních tutoriálů zde na ITnetworku
Tady máš nejspíš požadované řešení (malinko jsem ti to upravi, jo a
třída se nepíše s malým písmenkem )
import java.util.Scanner;
public class JoinExample{
public static void main(String[] args) throws InterruptedException {
Scanner scanner = new Scanner(System.in, "Windows-1250");
System.out.println("Zadejte rozmezí od:");
String startText = scanner.nextLine();
int start = startText != null && startText.trim().matches("\\d+") ? Integer.parseInt(startText) : 0;
System.out.println("Zadejte rozmezí do:");
String endText = scanner.nextLine();
int end = endText != null && endText.trim().matches("\\d+") ? Integer.parseInt(endText) : 0;
System.out.println("Začíná výpis čísel");
runThread(new PrintNumbers(start, end));
runThread(new PrintNumbers(1, 20));
runThread(new PrintNumbers(21, 40));
runThread(new PrintNumbers(41, 60));
runThread(new PrintNumbers(61, 80));
runThread(new PrintNumbers(81, 100));
System.out.println("Výpis čísel úspěšně skončil.");
}
private static void runThread(Thread thread) throws InterruptedException {
thread.start();
thread.join();
}
}
class PrintNumbers extends Thread {
private int začátek;
private int konec;
public PrintNumbers(int start, int end) {
this.začátek = start;
this.konec = end;
}
@Override
public void run() {
for (int i = začátek; i <= konec; i++) {
System.out.println(Thread.currentThread().getName() + " - " + i);
}
System.out.println(Thread.currentThread().getName() + " část vpsaná.");
try {
Thread.sleep(850);
} catch (InterruptedException ex) {
}
}
}
A protože se mi líbí, že si kluk šikovná a pracuješ na sobě, tak tady
ti dám jen tak z legrace ukázku jak by sis mohl hrát s vyskakovacími okny
trošku starší technologie
Je to sice swing, ale na rozdíl od FX, tak tyto metody fungují vždy a všude
(zatím tedy ještě).
JOptionPane.showInputDialog() - zobrazí text na ploše
JOptionPane.showInputDialog() - zobrazí okno pro vložení textu
JOptionPane.showConfirmDialog() - zobrazí okno s možnostmi ano/ne
Nahraď si místo scanneru JOptionPane, čili nahraď tyto řádky:
Scanner scanner = new Scanner(System.in, "Windows-1250");
System.out.println("Zadejte rozmezí od:");
String startText = scanner.nextLine();
int start = startText != null && startText.trim().matches("\\d+") ? Integer.parseInt(startText) : 0;
System.out.println("Zadejte rozmezí do:");
String endText = scanner.nextLine();
int end = endText != null && endText.trim().matches("\\d+") ? Integer.parseInt(endText) : 0;
těmito
String startText = JOptionPane.showInputDialog("Zadejte rozmezí od:");
int start = startText != null && startText.trim().matches("\\d+") ? Integer.parseInt(startText) : 0;
String endText = JOptionPane.showInputDialog("Zadejte rozmezí do:");
int end = endText != null && endText.trim().matches("\\d+") ? Integer.parseInt(endText) : 0;
Jo a nediv se, že ti nepůjdou záporné hodnoty. jestli je tam chceš, tak
stačí odmazat ten regex - matches("\\d+").
Tomuhle se říká regulární výraz a konkrétně déčko znamená přirozená
čísla. To plusko neznamená kladné hodnoty, ale že můžeš zadat 1 až
nekonečno znaků
Zobrazeno 3 zpráv z 3.