我正在尝试执行以下循环:
这将永远重复。我使它与以下工作:
//Step 3
transition.setOnFinished(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
doTheThing(); //Step 1, updates data
transition.setToValue(data);
transition.play(); // Step 2
}
});
transition.play(); //Triggers first repeat
Run Code Online (Sandbox Code Playgroud)
当然,这是一个无限的递归循环,这不是一个好主意。问题是,一旦转换完成,我不知道如何触发重复。我试过使用循环:
while (1==1){
doTheThing();
transition.setToValue(data);
transition.play();
}
Run Code Online (Sandbox Code Playgroud)
但这不仅不等待转换(在意料之中,对我来说不是问题),它根本不播放转换,并且程序没有响应。我也试过这个:
transition.setOnFinished(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
ready = true;
}
});
while (1==1){
if (ready){
ready = false;
doTheThing();
transition.setToValue();
transition.play();
}
}
Run Code Online (Sandbox Code Playgroud)
但它的作用与解决方案#2 相同。我宁愿不编程等待,但即使我这样做了,我也不确定如何在循环重复之前等待,同时不停止播放过渡。
我可以做什么?
我有一个特征“ Value”和一个扩展类“ Equation”,如下所示:
trait Value {
def apply(in: Input): Int
}
class Equation ( eq: Array[Array[Value]] ) extends Value {
override def apply (in: Input) = {
eq.map(addend => addend.map( _(in) ).fold(1)(_ * _) ).fold(0)(_ + _)
}
def this(eq: String) = {
this( eq.replace("-", "+-").split('+').map( _.split('*').map(s => Value(s)) ) )
}
}
Run Code Online (Sandbox Code Playgroud)
(出于我的目的,没有必要进行除法,减法通过添加负数来解决。我打算在完成完整的字符串解析器后在此处删除辅助构造函数,这是一种不处理括号的快速解决方案)
在尝试将字符串解析为方程式的过程中,我创建了Array [Array [Equation]],因为方程式内部的方程式允许我处理括号的运算顺序。由于方程式是一个值,所以我希望可以将此Array [Array [Equation]]传递到方程式的构造函数中,但是随后出现以下错误:
overloaded method constructor Equation with alternatives:
[error] (eq: String)spekular.misc.Equation <and>
[error] (eq: Array[Array[spekular.misc.Value]])spekular.misc.Equation
[error] cannot be applied to (Array[Array[spekular.misc.Equation]])
Run Code Online (Sandbox Code Playgroud)
知道我在做什么错吗?我尝试重写方程式的构造函数(请参见下文),但这给了我更多的错误,而且似乎比必需的更为复杂:
class …Run Code Online (Sandbox Code Playgroud) constructor ×1
inheritance ×1
java ×1
javafx ×1
loops ×1
scala ×1
traits ×1
transition ×1
wait ×1