如何检查args数组的结尾?

时间:2015-06-09 21:06:43

标签: java arrays scala args

我正在Scala中编写一个解析器程序,它应该使用" args"并解析它。我使用它并不重要:

   while(!args.isEmpty){ 
        if (Files.exists(Paths.get(args(j)))){
            Statement=Statement.concat(inputXml)
            Statement=Statement.concat(" ")
            println(j)
            }
         else{
            Statement=Statement.concat(args(j))
            Statement=Statement.concat(" ")
            println(j)
            }
    j=j+1
    }

   while(args.length !=0) { 
         if (Files.exists(Paths.get(args(j)))){
            Statement=Statement.concat(inputXml)
            Statement=Statement.concat(" ")
            println(j)
            }
         else{
            Statement=Statement.concat(args(j))
            Statement=Statement.concat(" ")
            println(j)
            }
    j=j+1
  }

程序给我运行时异常的数组索引超出界限!发送2个值作为输入:

  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

我该怎么办?我很困惑!

3 个答案:

答案 0 :(得分:4)

您的例外:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

是因为你没有打破while循环; args参数永远不会改变它的大小,因此while将永远变为util j超过args的大小。

也许你可以试试:

int i = 0
while (i < args.length){
    // some code here
    i++;
}

for(int i = 0; i < args.length; i++){
// some code here
}

如果要遍历所有数组

答案 1 :(得分:3)

根据您的描述,您需要在索引低于最大数组大小时迭代数组。如果你只是比较args.length值,循环条件将继续无限地评估为真值,因为args.length总是不同于0(如果没有改变)。

您需要以下内容:

for(i <- 0 until array.length){
...

您可以找到有关访问和迭代数组的更多信息herehere

答案 2 :(得分:1)

考虑在不使用索引引用(越界错误的来源)的情况下迭代args

for ( arg <- args ) yield {
  if (Files.exists(Paths.get(arg))) xmlFile
  else ""
}.mkString(" ")

这对于理解产生了String的集合,它被转换为带mkString的空格分隔字符串。