问题是 :


  编写一个程序,该程序读取数字n,然后声明n个元素的数组。然后,程序将前n个数字填充到数组中,其中每个数字都是前一个幂的2。最后,显示阵列的内容。


我的代码:

import java.util.*;

public class Q1 {
  static Scanner scan = new Scanner (System.in);

  public static void main(String args [] ) {
    int num;
    int i = 0;
    System.out.println("Enter a number :");
    num = scan.nextInt();

    double [] a=new double[num];
    a[0]= num ;

    for ( ;i<=a.length-1 ; i++) {
      a[i+1] = Math.pow(2,a[i]);

      System.out.println((int)(a[i]) );
    }
  }
}


错误是:

   ----jGRASP exec: java Q1

Enter a number :
4
4
16
65536
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at Q1.main(Q1.java:16)

 ----jGRASP wedge2: exit code for process is 1.


为什么这么说呢?
并按用户编号印两次!

最佳答案

 a[i+1] = Math.pow(2,a[i]); // issue here


i=a.length-1时,i+1a.length。因此,此数组中没有索引值匹配。

建议:

创建一个具有lenght= a.length+1的数组

double powArray[] =new double[a.length+1];


现在

powArray[0]=a[0];
for(int i=1;i<powArray.length;i++){
   powArray[i]=Math.pow(2,a[i-1]);
}

07-25 21:34
查看更多