【问题标题】:Exception error when printing values from an array in Java从 Java 中的数组打印值时出现异常错误
【发布时间】:2015-10-18 18:32:21
【问题描述】:

我试图在循环中的每次迭代中使用 2.4 的增量将值传递到我的数组中。这是我的代码:

import java.util.*;

public class RunningArray { 
   public static void main(String[] args) { 

   double [] running = new double [10];

   int i;

   for (i=0; i<running.length; i+=2.4)    
      running[i]=i;    
      System.out.println(running[i]);

  }
}

但是当我尝试print (running[i]) 时,我得到了错误

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 10 在 RunningArray.main(RunningArray.java:26)

谁能解释一下原因?

【问题讨论】:

  • 那是因为 2.4 * 10 > 10
  • @SergeyPauk 从来没有那么高。
  • 是的,你们都在阅读它,就像它是 Python 一样。 :-) println 循环运行之后,当 i 达到循环限制时。 i += 2.4 与它无关,即使使用 i++ 也会抛出异常。
  • @carchelhf 您正在使用一个奇怪的增量 (2.4) 创建值 0、2、4、6、8 来访问数组并存储这些值。你写 2.4 的时候有什么想法?
  • @laune 这是对 OP 的简短提示。当然,如果要精确,则应该说i每次递增2,因此当值变为10时会触发异常。

标签: java arrays indexoutofboundsexception


【解决方案1】:

循环计数器很好,真正的问题是因为您没有将running[i]=i; 括在大括号中,所以这是 for 循环中的唯一语句。您在 for 循环之外打印 running[i],所以 i &gt;= running.length(在本例中为 10)。

【讨论】:

    【解决方案2】:

    异常是不言自明的。 i 的值超出了数组长度 10。在访问数组值之前打印 i 值,您就会知道问题所在。

    i = i+ 2.4 的任何原因?

    在任何时候,我都不应该跨越 10 的数组长度。

    【讨论】:

      【解决方案3】:

      这是因为变量 i 是 int 类型,每次将其增加 2.4 时,其值只会增加 2。

      for (i=0; i<running.length; i+=2.4)    
      System.out.print(i+", ");
      
      Output: 0, 2, 4, 6, 8,
      

      但就在循环条件被测试为假之前,i 增加 2 使其值为 10。 当你写下没有大括号的行时,它取 i 的最后一个值,即 10

      System.out.println(running[i]);
      

      由于 running[i] for i=10 不可用,因此会出现异常。

      这样写

      for (i=0; i<running.length; i+=2.4)    
      {   running[i]=i;  
        System.out.println(running[i]);
      }
      
      Output:
      0.0
      2.0
      4.0
      6.0
      8.0
      

      i 的值不要加 2.4,使用另一个 double 数据类型的变量,将其增加 2.4 并将其存储在数组中。

      double [] running = new double [10];
       double d=0.0;
       for (int i=0; i<running.length; i++)    
       {
        d+=2.4;  
        running[i]=d;  
        System.out.println(running[i]);
       } 
      
      output:
      2.4
      4.8
      7.199999999999999
      9.6
      12.0
      14.4
      16.8
      19.2
      21.599999999999998
      23.999999999999996
      

      【讨论】:

        【解决方案4】:

        您还将 i 实例化为 int ,这意味着 .4 每次都被剥离。将变量初始化为双精度值,它应该在您逐步迭代时带有小数点。

         double [] running = new double [10];
        
         Double i;
        
         for (i=0.0; i<running.length; i+=2.4)
         {    
            running[i]=i;    
            System.out.println(running[i]);
         }
        

        【讨论】:

        • 数组索引不能使用双精度值
        猜你喜欢
        • 2014-12-30
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        • 2015-07-09
        • 1970-01-01
        • 2013-11-10
        • 2020-03-23
        相关资源
        最近更新 更多