【发布时间】:2022-10-05 19:03:59
【问题描述】:
我想创建一个基本的国际象棋时钟,但我卡住了。
package SatrancSaati;
import java.util.Scanner;
public class SatrancSaatiRunner {
static int beyazZamani = 60;
static int siyahZamani = 60;
static boolean BeyazinSirasi = false;
static boolean SiyahinSirasi = false;//rakip baslar
static boolean zamanVarMi = true;
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 999; i++) {
Scanner scanner = new Scanner(System.in);
System.out.println(\"Beyaz hamle yaptiktan sonra 1 e basmali\");
System.out.println(\"Siyah hamle yaptiktan sonra 2 e basmali\");
int kiminSirasi = scanner.nextInt();
if (kiminSirasi == 1) {
saatCalistirSiyah(BeyazinSirasi, siyahZamani, zamanVarMi, beyazZamani, siyahZamani);
} else if (kiminSirasi == 2) {
saatCalistirBeyaz(BeyazinSirasi, siyahZamani, zamanVarMi, beyazZamani, siyahZamani);
}
}
}
private static void saatCalistirBeyaz(boolean beyazinSirasi, int siyahZamani, boolean zamanVarMi, int beyazZamani, int siyahZamani1) throws InterruptedException {
System.out.println(\"***Hamle Beyazda***\");
while (true) {
siyahZamani++;
beyazZamani--;
System.out.print(\"Beyaz: \" + beyazZamani + \" \");
System.out.print(\"Siyah: \" + siyahZamani);
System.out.print(\"\\u000C\");
Thread.sleep(1000);
if (beyazZamani <= 0 || siyahZamani <= 0) {
break;
}
}
}
private static void saatCalistirSiyah(boolean beyazinSirasi, int siyahZamani, boolean zamanVarMi,
int beyazZamani, int siyahZamani1) throws InterruptedException {
System.out.println(\"***Hamle Siyahta***\");
while (true) {
beyazZamani++;
siyahZamani--;
System.out.print(\"Beyaz: \" + beyazZamani + \" \");
System.out.print(\"Siyah: \" + siyahZamani);
System.out.print(\"\\u000C\");
Thread.sleep(1000);
if (beyazZamani <= 0 || siyahZamani <= 0) {
break;
}
}
}
}
这是我的基本代码,我希望该代码像这样工作:
当我在 IntelliJ 上单击 1 时,黑色时间开始下降,白色时间增加相同的数量。当我单击 2 时运行此代码时,我想停止另一种方法并启动相反的方法,该方法增加了白色的时间并减少了相同数量的黑色时间。这非常困难,因为当我开始一种方法时,它一直有效直到完成。那是我的问题。
-
您可以使用线程或ExecutorService。
-
也许更接近它:A timer 每秒滴答一次。当它滴答作响时,根据当前是轮到黑还是白,您相应地更新他们的时间计数。 While/sleep 循环倾向于从真实时间“漂移”,因为每次迭代并不需要 1 秒。
-
两个信号量和一个单元?输入时,发出信号量并等待另一个信号量。
标签: java multithreading loops