我是 IBM Host On Demand 宏 (HAScript) 的新手。它使用 XML 格式,但您可以导入 Java 类并调用方法。我想将整数列表读入变量并迭代它们,对每个整数执行操作。在下面的代码中,我只是尝试使用 java.util.scanner 从文本文件中读取整数,这是尝试循环之前的第一步。
我收到错误消息“Macro.PlayThread.playActions(MacroActions,MacroScreen):类 java.util.Scanner 不包含指定的方法 hasNextInt”。
我正在尝试使用这些手册,但至少可以说它们很模糊,而且很难找到示例。任何帮助将不胜感激。我的背景是 SQL,而不是 Java 或 XML。 谢谢!
我的代码:
<import>
<!-- Importing Necessary Java classes -->
<type class="java.io.File" name="javaFile"/>
<type class="java.io.FileReader"/>
<type class="java.io.BufferedReader"/>
<type class="java.io.IOException"/>
<type class="java.util.ArrayList"/>
<type class="java.util.Scanner" name="javaScanner"/>
</import>
<vars>
<!-- Creating an ArrayList variable named $list$ -->
<create name="$list$" type="java.util.ArrayList" value="$new java.util.ArrayList()$" />
</vars>
<screen name="Screen1" entryscreen="true" exitscreen="true" transient="false">
<description >
<!-- OIA settings -->
<oia status="NOTINHIBITED" optional="false" invertmatch="false" />
</description>
<actions>
<!-- Read integers from the text file -->
<perform value="$new javaFile('C:\\Users\\Documents\\scripts\\apps\\allow\\acctlist.txt')$" />
<perform value="$new javaScanner('C:\\Users\\Documents\\scripts\\apps\\allow\\acctlist.txt')$" />
<if condition="$javaScanner.hasNextInt(true)$" >
<perform value="$javaScanner.nextInt()$" />
</if>
<else>
<perform value="$javaScanner.close()$" />
</else>
<!-- Displaying $list$ content (for debugging, remove later) -->
<message title="" value="$javaScanner.toString()$" />
</actions>
<nextscreens timeout="0" >
</nextscreens>
</screen>
我对这个 HAScript 并不熟悉,但我认为答案可能很简单。 您似乎想要使用
java.util.Scanner
并决定下一个输入是否为 Int
。 XML 中有这样的内容:
<if condition="$javaScanner.hasNextInt(true)$" >
但就像错误所说,这里没有这样的
hasNextInt( .... )
需要布尔值的方法。 只有两种方法:
Int
的数字,即数字的基数(或基数)。10
参见 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Scanner.html#hasNextInt()
因此尝试将 XML 更改为:
<if condition="$javaScanner.hasNextInt()$" >