当前位置: 首页 > 知识库问答 >
问题:

索引出界异常,当从文件中反向读取k个整数时。如何修复此问题?[复制]

齐飞星
2023-03-14
static void readKIntegersReversed(String filename, int k) throws IOException {
        try (DataInputStream dos = new DataInputStream(new FileInputStream(filename))) {
         int res = 0;
         byte[] buff = new byte[]{};
         int[] ans = new int[]{};
         int j = 0;
         while((res=dos.read(buff))!=-1){
              ans[j] =res;
              j++;
         }

         for(int i = k; i>=0; i--){
                System.out.println(ans[i]);
                
         }
                 
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }

这段代码从文件中读取k个整数。它执行并打印所需的位数,但最后显示“索引0超出长度0的界限”。这里有什么问题?

共有2个答案

钱照
2023-03-14

正如你在问题中提到的,期望的结果是打印良好,最后它抛出数组超出绑定异常。

问题在于这里的for循环。假设ans数组有10个元素。现在,当使用for循环从10到0进行迭代时,它将从10到0(10,9,8,7,6,5,4,3,2,1,0)读取11个元素。因此,要么从10到1,要么从9到0运行循环

在您的情况下,必须从k到1或从k-1到0运行循环。此外,在您的情况下,您正在从K运行到0,这将导致错误越界,因为k1元素不存在。

宋子辰
2023-03-14

在这一行

int[] ans = new int[]{};

定义一个空整数数组。基本上与newint[0]相同

如果您尝试设置或从中读取任何值,如ans[0]=0,您将获得一个IndexOutOfRangeExctive,因为索引0(以及本例中的任何其他索引)不在空数组的有效范围内。

也许你可以试着用列表代替?

List<Integer> ans = new ArrayList<>();
...
ans.add(res);
...
System.out.println(ans.get(i));

 类似资料:
  • 我做了一个小程序,应该从特定目录的文件中读取元数据。元数据打印在标签中。我已经复制了下面的代码。“System.out.println(Arrays.toString(Source ceFiles));”返回文件夹中的所有10个文件。但是“System.out.println(x);”只返回3个文件,然后给出一个索引3的出界错误。我如何修复我的代码,使其读取所有10个文件?有人能帮我吗?(如果我取

  • 我在尝试读取csv文件时遇到问题,错误如下所示: 。我尝试过在堆栈溢出中搜索,错误与上面相同。 法典: MyCSVFile:

  • 我使用的是Selenium3.9.0+Geckodriver0.24+Firefox58.0.2。 当webdriver想要在我的目标站点上单击导航树中的元素时->script crashing with selenium异常:“selenium.Common.Exceptions.ElementClickInterceptedException:Message:element is not cl

  • 我一直在四处寻找是否有任何东西可以帮助我,但我不太了解人们的回答,任何我所了解的似乎都不能解决问题!所以基本上正如标题所说,我得到了一个数组索引越界异常,但我不知道为什么。非常感谢任何帮助。 代码:

  • 所以基本上我应该做的是,我应该得到一个字符串的数组列表,用两个字符串填充它,然后比较它们。例如,如果一个字符串是“1,2,3,4”,第二个字符串是“7,6,2,8,1”,那么它应该打印出“1,2”,因为它打印出的数字相似。但我遇到了和arrayindexoutofbounds异常,我不知道如何修复它。此外,如果你有任何可能缩短此代码的提示,也请告诉我。我有一个习惯,让我的代码超长。

  • 固定的: 我删除了while循环并添加了 我正在尝试向一个单词中随机添加一个额外的字母副本(介于0-8之间)。实例does可能会变成dooee或doess。 我的函数有时会工作,但总是会因越界索引错误而崩溃。 我假设我需要在某个时刻检查ArrayList中的空值。我试着用和if来包装我的while语句,以检查它,但没有任何改进。有什么建议吗?