【发布时间】:2021-05-21 19:30:30
【问题描述】:
这样做的目的是根据温度的冷热程度来控制蚊子的出生率。温度与滑块相关联,因此用户可以在模拟过程中调整温度以观察蚊子出生率的变化。温度越接近75,蚊子的出生率就越高。但是我有这个问题:
当我尝试运行我的 AnyLogic 模型时,这是我得到的唯一错误,它使模型在我尝试运行它时无法运行模拟窗口:
Couldn't parse expression for Mosquito_Births - Flow: syntax error.
Please check expressions of this variable.
at group4_assignment2.Main.<init>(Main.java:460)
at group4_assignment2.Simulation.createRoot(Simulation.java:154)
at group4_assignment2.Simulation.createRoot(Simulation.java:1)
[这是模型中发现错误部分的图片,用红色圈起来] :https://i.stack.imgur.com/sx8hH.png
Temperature_F 链接到函数 NEAsia_Temperature_F。下限设置为 1,上限设置为 120。
函数 NEAsia_Temperature_F 设置为返回int 值,代码为:
if(Temperature_F <= 75){
NEAsia_Temperature_F = (Temperature_F / 75);
} else {
NEAsia_Temperature_F = (2 - (Temperature_F / 75));
}
return NEAsia_Temperature_F;
NEAsia_Mosquito_Birthrate = 0.45
Mosquito_Births = (NEAsia_Mosquito_Pop * NEAsia_Mosquito_BirthRate) * (NEAsia_Temperature_F(Temperature_F);)
NEAsia_Mosquito_Pop = 100
这是从与错误关联的模型自动生成的 Java 代码。错误在底部的if (true) throw new RuntimeException 行:
private static String[] _parameterNames_xjal;
@Override
public String[] getParameterNames() {
String[] result = _parameterNames_xjal;
if (result == null) {
List<String> list = new ArrayList<>( Arrays.asList( super.getParameterNames() ) );
list.add( "NEAsia_Human_FertilityRate" );
list.add( "NEAsia_Mosquito_BirthRate" );
list.add( "Mosquito_Mortality_Rate" );
list.add( "Human_Mortality_Rate" );
list.add( "Contact_Rate" );
list.add( "Incubation_Time" );
list.add( "Infection_Duration" );
result = list.toArray( new String[ list.size() ] );
_parameterNames_xjal = result;
}
return result;
}
// Dynamic (Flow/Auxiliary/Stock) Variables
{
if (true) throw new RuntimeException("ERROR during variable generation:\nCouldn't parse expression for Mosquito_Births - Flow: syntax error.\r\nPlease check expressions of this variable.");
}
问题显然源于 Mosquito_Births 中的函数调用,但是当我尝试运行模型时,除了那个单一的语法错误之外,我在任何地方都没有收到任何其他语法错误。我花了很长时间才让它没有错误(最后一个除外)。非常感谢任何提示/建议/帮助!
【问题讨论】:
标签: java function parsing anylogic runtimeexception