【发布时间】:2021-11-13 14:26:37
【问题描述】:
我有以下课程
class ListNode
{
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
我的任务是编写一个方法:
- 以
int[]为参数。 - 反转数组。
- 返回
ListNode,它具有数组中当前元素的值,具有新创建的ListNode 的.next与数组中的相应值,依此类推。
给定new int[]{0, 8, 7};的输入,我希望得到一个ListNode,其中值为7,.next是一个值为8的新节点,最后.next.next是一个值为0的新节点。
我写了以下方法来完成这样的行为
public static ListNode reverseAndLinkToListNode(int [] arrayToReverse)
{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
int finalDigitsArrayLength = arrayToReverse.length;
ListNode finalNode = new ListNode();
if (finalDigitsArrayLength > 0)
{
finalNode.val = arrayToReverse[finalDigitsArrayLength - 1];
int j = 1;
for (int i = finalDigitsArrayLength - 2; i >= 0; i--)
{
try
{
// create a new list node
ListNode newlyCreatedNode = new ListNode(arrayToReverse[i]);
// calculate how many 'nexts' I need
String codeToExecute = returnNumberOfNexts(j);
// set the next field with the list node I just created
engine.eval(codeToExecute);
}
catch (Exception e)
{
System.out.println(e);
}
j++;
}
}
return finalNode;
}
public static String returnNumberOfNexts(int nextCounter)
{
String finalDotNextString = "finalNode";
if (nextCounter > 0)
{
for (int i = 0; i < nextCounter; i++)
{
finalDotNextString += ".next";
}
}
finalDotNextString += " = newlyCreatedNode;";
return finalDotNextString;
}
上面的解决方案返回了正确的代码来执行,但是在执行时,我得到:
javax.script.ScriptException: ReferenceError: "finalNode" is not defined in <eval> at line number 1
如何在引擎中定义finalNode 和newlyCreatedNode 变量?
【问题讨论】:
-
你为什么需要
ScriptEngine?只需自己循环调用.next()即可。 -
这将简单地覆盖finalNode的
.next成员。我需要把它们都链接起来 -
我的意思是使用循环遍历节点并设置最后一个元素的
.next。您可以将.next的结果分配给一个变量,并在循环中对该变量调用.next(每次都将变量设置为结果)
标签: java reference scriptengine