各位大虾帮我看看,我想在运行时确定数组的长度,但是好象不行。
import java.util.Random;
public class T{
Random r=new Random();//随机生成器
String s[]; //声明一个动态数组,长度在运行时确定
public static void main(String args[]){
int k=r.nextInt();                  //由随机生成器生成动态数组长度。
s=new String[k];                    //动态初始化数组
for(int m=0;m<s.length;m++)
   s[m]="123";                      //给数组赋值
for(int j=0;j<s.length;j++)
   System.out.print(s[j]);          //打印数组
}
}

解决方案 »

  1.   

    //测试通过
    //---初学者import java.util.Random;public class ArryLength {
        Random r = new Random();//随机生成器    String[] s; //声明一个动态数组,长度在运行时确定
        ArryLength(){
            int len = r.nextInt(100); //由随机生成器生成动态数组长度。
            System.out.println("Length: " + len);
            s = new String[len]; //动态初始化数组
            for (int m = 0; m < s.length; m++)
                s[m] = "123"; //给数组赋值
            for (int j = 0; j < s.length; j++)
                System.out.print(s[j]); //打印数组        
        }    public static void main(String args[]) {
            new ArryLength();
        }
    }
      

  2.   

    main方法中能访问r和s[]吗?编译都通不过
      

  3.   

    你把那个 k 值用System.out.println(k); 打印出来就知道为什么了
      

  4.   

    import java.util.Random;
    public class T{
    //声明一个动态数组,长度在运行时确定
            public static void main(String args[]){
                    int k=new Random().nextInt();              //由随机生成器生成动态数组长度。
                    String s[]=new String[k];                    //动态初始化数组
                    for(int m=0;m<s.length;m++)
                       s[m]="123";                      //给数组赋值
                    for(int j=0;j<s.length;j++)
                       System.out.print(s[j]);          //打印数组
            }
    }
    这样可以 但是因为int生成的数会很大引起内存溢出
      

  5.   

    大哥,main方法中当然不能直接用了,首先得声明该类的实例阿
    import java.util.Random;
    public class T{
    Random r=new Random();//随机生成器
    String s[];
          public static void main(String args[])
          {
              ........
              T.my_t;
              my_t.s=new s[....]      }}
    或者如果只有一个实例的话干脆把s[]声明成static的吧
      

  6.   

    import java.util.Random;
    public class T{
    Random r=new Random();//随机生成器
    String s[]; //声明一个动态数组,长度在运行时确定
    public static void main(String args[]){
    T t = new T();
    int k=t.r.nextInt(100);                  //由随机生成器生成动态数组长度。
    t.s=new String[k];                    //动态初始化数组
    for(int m=0;m<t.s.length;m++)
       t.s[m]="123";                      //给数组赋值
    for(int j=0;j<t.s.length;j++)
       System.out.print(t.s[j]);          //打印数组
    }
    }
      

  7.   

    我是想用这个原理来写一个JAVABEAN
    代码如下:
    package bean;
    import bean.BeanConnSql;
    import bean.CodeFormate;
    import java.sql.*;
    /**
     * <p>Title: </p>
     * <p>Description:
     * 用于选课时列出课程信息;
     * </p>
     * <p>Copyright: Copyright (c) 2005</p>
     * <p>Company: </p>
     * @author unascribed
     * @version 1.0
     */public class ListCourse {
      private String stuNo;     //学号
      private String[] cno;      //课程号
      private String[] cname;    //课程名
      private String[] classNo;  //班次
      private String[] tname;    //教师名
      private int[] creadit;    //学分
      private String[] classTime1;//上课时间1
      private String[] classTime2;//上课时间2
      private String[] classTime3;//上课时间3
      private String[] classAddr1;//上课地点1
      private String[] classAddr2; //上课地点2
      private String[] classAddr3;//上课地点3
      private int[] capatity;  //容量
      private int[] factCapatity;   //实选人数
      //private boolean control=true;
      private int c=0;//记录数 即学生所选课程数。
      public void setstuNo(String str){
        stuNo=str;
      }
      /*private void setcno(String str){
        cno=str;
      }
      private void setcname(String str){
        cname=str;
      }
      private void setclassNo(String str){
        classNo=str;
      }
      private void settname(String str){
        tname=str;
      }
      private void setcreadit(int c){
        creadit=c;
      }
      private void setclassTime1(String str){
        classTime1=str;
      }
      private void setclassTime2(String str){
        classTime2=str;
      }
      private void setclassTime3(String str){
        classTime3=str;
      }
      private void setclassAddr1(String str){
        classAddr1=str;
      }
      private void setclassAddr2(String str){
        classAddr2=str;
      }
      private void setclassAddr3(String str){
        classAddr3=str;
      }
      private void setcapatity(int s){
        capatity=s;
      }
      private void setfactCapatity(int c){
        factCapatity=c;
      }*/
      public String getcno(int i){
        return cno[i];
      }
      public String getcname(int i){
        return cname[i];
      }
      public String  getclassNo(int i){
        return classNo[i];
      }
      public String gettname(int i){
        return tname[i];
      }
      public int getcreadit(int i){
        return creadit[i];
      }
      public String getclassTime1(int i){
        return classTime1[i];
      }
      public String getclassTime2(int i){
        return classTime2[i];
      }
      public String getclassTime3(int i){
        return classTime3[i];
      }
      public String getclassAddr1(int i){
        return classAddr1[i];
      }
      public String getclassAddr2(int i){
        return classAddr2[i];
      }
      public String getclassAddr3(int i){
        return classAddr3[i];
      }
      public int getcapatity(int i){
        return capatity[i];
      }
      public int getfactCapatity(int i){
        //control=true;
        return factCapatity[i];
      }
      public void connSql(){
      }
      public void listStudentCourseTable(){
        BeanConnSql bcs=new BeanConnSql();//连接数据库的BEAN
        ResultSet rs=null;
        CodeFormate cf=new CodeFormate();//字符编码转换用有RESULT转换到可以在JSP页面中显示的编码方式。
        String queryStr="select a.courseNo,a.courseName,subString(c.classNo,12,1),d.teacherName,a.credit,b.classTime1,b.classTime2,b.classTime3,b.classAddr1,b.classAddr2,b.classAddr3,quantity as capatity,factQuantity as factCapatity from Course a,CourseInfo b,StudentCourse c,Teacher d where a.courseNo=b.courseNo and b.teacherNo=d.teacherNo and b.classNo=c.classNo and c.stuNo='0021455'";
        try{
          rs=bcs.executeQuery(queryStr);//执行SQL语句
          //很多门课怎么解决?
          while(rs.next())
            c++;
          rs.first();
          cno=new String[c];
          int k=0;
          while(rs.next()){
              cno[k]=cf.getGB2312(rs.getString(1));//就是这里的问题。用动态数组来保存从数据库中选取出来的数据。
              cname[k]=cf.getGB2312(rs.getString(2));
              classNo[k]=cf.getGB2312(rs.getString(3));
              tname[k]=cf.getGB2312(rs.getString(4));
              creadit[k]=rs.getInt(5);
              classTime1[k]=cf.getGB2312(rs.getString(6));
              classTime2[k]=cf.getGB2312(rs.getString(7));
              classTime3[k]=cf.getGB2312(rs.getString(8));
              classAddr1[k]=cf.getGB2312(rs.getString(9));
              classAddr2[k]=cf.getGB2312(rs.getString(10));
              classAddr3[k]=cf.getGB2312(rs.getString(11));
              capatity[k]=rs.getInt(12);
              factCapatity[k]=rs.getInt(13);
              k++;      }    }catch(Exception e){
          System.err.println(e.getMessage());
        }finally{
          try{
            rs.close();
          }catch(Exception e){
            e.printStackTrace();
          }
          bcs.close();
        }
      }
      public void chooseCourse(String strcno){  }
      public int getcountRows(){
        return c;
      }
    }
    运行到listStudentCourseTable方法的while语句里面的第一个赋值语句就抛出异常。e.getMessage()显示为null,但是我在数据库中明明有测试语句。
    请问是不是必须生命类的实例才能通过编译啊?
      

  8.   

    static 方法main只能使用static数据成员,所以r和s必须申明为static成员。nextInt(int i)应该传给其整数实参。
    java完全可以申请动态长度的数组
      

  9.   

    因为你的 r 和 s 都是非静态的,而main方法是一个静态方法,所以在main中是不能够访问r 和 s 的,其余的地方好象没什么问题。