我一直在尝试制作一个模拟盒子运动的小程序。当用户按下a
时,该框将移至左侧,而当按下s
时,该框将移至右侧。
在视觉上,盒子及其空间由名为mystring
的字符串完成,该字符串定义为
static String mystring = new String(":------<><>------:");
在主类中,:
是墙壁,<><>
是盒子。
为此,我创建了两个线程,一个线程读取一个,另一个线程应该写入。两者必须并行运行。
在发布代码之前,我将描述当前问题以及发布此问题的原因:
我想得到您的帮助,因为我的逻辑是错误的。由于某种原因,永远不会调用write方法。我必须改变什么才能实现自己的目标?
我知道这有点混乱,因为除了这个问题之外,我还遇到了其他问题,这些问题通过创建同步来解决。效果是大代码解决了一个小问题。
代码:
import java.io.IOException;
public class Main {
static String mystring = new String(":------<><>------:");
static synchronized String getMyS(){return mystring;}
static synchronized void setMyS(String ss){mystring = ss;}
static synchronized void read(){
try {
char c;
c = (char) System.in.read();
System.in.read();
if (c == 'a' & getMyS().substring(1, 2).equals("-")) {
setMyS(":" + getMyS().substring(2, 17) + "-:");
} else if (c == 's' & getMyS().substring(16, 17).equals("-")) {
setMyS(":-" + getMyS().substring(1, 16) + ":");
}
} catch (IOException x) {
}
}
static synchronized void write(){
try
{
System.out.println(getMyS());
Thread.sleep(400);
}
catch(Exception a)
{
}
}
public static void main(String[] args)
{
Thread t1 = new Thread(
() ->
{
while (true) {
read();
}
}
);
Thread t2 = new Thread(
() ->
{
while(true){
try
{
write();
Thread.sleep(400);
}
catch(Exception a)
{}
}
}
);
t1.start();
t2.start();
try
{
Thread.sleep(10000);
System.out.println("TEEEEEEEEEEa" +
"");
t1.interrupt();
t2.interrupt();
}
catch(InterruptedException e)
{
}
}
}