package com.test;import  java.util.*;
import  java.lang.*; 
import  java.text.SimpleDateFormat; 
import java.util.Calendar; 
import org.joda.*;
public class test {
int N;
double R[] = new double[N]; test(int N1)
{
this.N=N1;
}

test()
{
this.N=12;
}

public void tt()
{
for(int i=0;i<N;i++)
{
   R[i]=0.0;
}
}

public static void main(String[] args) {
              test t= new test(13);
t.tt();
for(int i=0;i<t.N;i++)System.out.println(t.R[i]);
}
}为什么总提示数组越界呢?是否不能动态的生成数组?

解决方案 »

  1.   

    由于变量的初始化先于构造函数,所以当初始化数组R的时候,它只知道在创建test对象初始时自动给N初始化的值0,所以数组R的长度其实是0,而不是13。
      

  2.   

    数组初始化的时候不能用变量,
    可以用一个已经有值的变量,
    如:int N=10;
    double R[] = new double[N]; 
    这就没错了,
    -----------------
    类实例化的时候按照变量的声明先后先初始化变量,
    然后才走构造器,
    你的N是在构造器中传的,R[]初始化的时候还没值
      

  3.   

    double R[] = new double[N]; 
    这句写在构造方法中
      

  4.   

    程序在执行构造方法之前会先执行
    int N; 
    double R[] = new double[N]; 这两句。
    N的默认初始值是0,所以就初始化了一个长度为0的double数组,所以在方法中不管怎么赋值都会越界。
      

  5.   

    package com.test; import  java.util.*; 
    import  java.lang.*; 
    import  java.text.SimpleDateFormat; 
    import java.util.Calendar; 
    import org.joda.*; 
    public class test { 
    /*1.这一部分在构造成时要先被创造*/
    int N; 
    double R[] = new double[N]; //不能像这样声名r[]
    /*2.这一部分在声名对象时被执行*/
    test(int N1) 

    this.N=N1; 
    } test() 

    this.N=12; 
    } public void tt() 

    for(int i=0;i <N;i++) 

      R[i]=0.0; 

    } public static void main(String[] args) { 
                  test t= new test(13); 
    t.tt(); 
    for(int i=0;i <t.N;i++)System.out.println(t.R[i]); 


      

  6.   

    正确的使用是这样的:package com.personAndGhost.logic;import java.sql.Array;public class TestDynaArray { private int n;
    private Double array[] ;

    public TestDynaArray(int m){

    this.n = m;
    array = new  Double[n];

    }
    public TestDynaArray(){

    this.n = 12;
    array = new Double[n];
    }

    public void fillArray(){

    for (int i = 0; i < this.n; i++){

    array[i] = 0.0;
    }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    TestDynaArray test = new TestDynaArray(13);

    System.out.println(test.array.length);

    test.fillArray();

    for (int i = 0; i < test.array.length; i++){
    System.out.println(test.array[i]);

    } }}
      

  7.   

    这样就可以了,把new double[N];放到构造方法里面
    public class test { 
    int N; 
    double[] R;
    test(int N1){ 
    this.N=N1;
    R= new double[N];
    }  test() 

    this.N=12;
    R = new double[N];
    }  public void tt() 

    for(int i=0;i <N;i++) 

    R[i]=0.0; 

    }  public static void main(String[] args) { 
                  test t= new test(13); 
                  t.tt(); 
                  for(int i=0;i <t.N;i++)System.out.println(t.R[i]); 

    }