各位大虾帮我看看,我想在运行时确定数组的长度,但是好象不行。
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]); //打印数组
}
}
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]); //打印数组
}
}
//---初学者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();
}
}
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生成的数会很大引起内存溢出
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的吧
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]); //打印数组
}
}
代码如下:
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,但是我在数据库中明明有测试语句。
请问是不是必须生命类的实例才能通过编译啊?
java完全可以申请动态长度的数组