【问题标题】:Array Index Out Of Bounds Exception -77数组索引越界异常 -77
【发布时间】:2016-08-03 18:09:40
【问题描述】:

我的代码有点问题。 我试图将代码从 python 重写为 java。

在 Python 中是:

data = bytearray(filesize)
f.readinto(data)

然后我试着用java写成这样:

try {
        data = Files.readAllBytes(file.toPath());
    } catch (IOException ex) {
        Logger.getLogger(Encrypter.class.getName()).log(Level.SEVERE, null, ex);
    }
    for(int index : data) {
        data[index] = (byte) ((byte) Math.pow(data[index], genfun((fileSize), index)) & 0xFF);
    }

一切对我来说似乎都很好,但是当我编译它并且有一个 java.lang.ArrayIndexOutOfBoundsException: -77

有没有人有线索或可以更好地重写它?

【问题讨论】:

  • for(int index : data) 为什么你认为你可以通过这个来获取索引?这是错误的。请改用常规的for 循环。
  • @Tom 这是一种非常粗鲁的方式来告诉他他使用了不正确的语法。 @czaro112112 使用 for (int i = 0; i < data.length; i++) 格式迭代递增索引。您当前的语法会迭代 data 的值
  • @Kon 你的意思是 “这是一种非常粗鲁的方式,告诉他他使用了明显不正确的语法,只要花几分钟的研究就知道了。”?我真的很难理解为什么很多新用户不研究使用过的 API 或语法。令人失望。

标签: java python arrays exception byte


【解决方案1】:

这种形式的for 循环(“增强”for 循环)产生数组的,而不是索引。 -77 的值是 byte 的有符号值,而不是索引,因此例外。请注意,即使该值被提取为 byte,Java 也很乐意将 value 隐式扩展为您声明的 int

使用标准的for 循环:

for (int index = 0; index < data.length; index++)
{
    byte value = data[index];
    data[index] = (byte) ( /* Your byte manipulation of value goes here */ );
}

【讨论】:

【解决方案2】:

Java 的for (a : b) 循环循环遍历,而不是索引。

index 实际上不是索引。

【讨论】:

    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2015-06-28
    • 2013-12-21
    相关资源
    最近更新 更多