java 对象数组输出问题
class Student
{
public static String name;
public static int id=0,status=0;
public static void main(String[] args)
{
int i=0,j=0,num=0;
Student[] student=new Student[5];
Random rand=new Random();
Scanner cin=new Scanner(System.in);
System.out.println("********输入区*********");
System.out.println();
for(i=0;i<5;i++)
{
System.out.print(i+1+"请输入学生的姓名:");
student[i].name=cin.next();
student[i].id=Math.abs(rand.nextInt());
System.out.print(i+1+"该学生的学号:");
System.out.println(student[i].id);
System.out.print(i+1+"该学生所在的年级:");
student[i].status=rand.nextInt(4);
while(student[i].status==0) student[i].status=rand.nextInt(4);
System.out.println(student[i].status);
System.out.println();
}
System.out.println("********显示区*********");
System.out.println();
while(j<5)
{
if(student[j].status==3)
{
System.out.println("所有三年级学生的姓名和id是:");
System.out.println(student[j].name+" "+student[j].id);
num++;
}
j++;
}
if(num==0) System.out.print("没有三年级的学生");
}
}
while处存在问题 求解决方法以及原因分析 展开
name,id,status怎么是static呢?改成下面的:
public class Student
{
public String name;
public int id=0;
public int status=0;
public static void main(String[] args)
{
int i=0,j=0,num=0;
Student[] student=new Student[5];
for (int a=0;a<student.length;a++) {
student[a] = new Student();
}
Random rand=new Random();
Scanner cin=new Scanner(System.in);
System.out.println("********输入区*********");
System.out.println();
for(i=0;i<5;i++)
{
System.out.print(i+1+"请输入学生的姓名:");
student[i].name=cin.next();
student[i].id=Math.abs(rand.nextInt());
System.out.print(i+1+"该学生的学号:");
System.out.println(student[i].id);
System.out.print(i+1+"该学生所在的年级:");
student[i].status=rand.nextInt(4);
while(student[i].status==0) student[i].status=rand.nextInt(4);
System.out.println(student[i].status);
System.out.println();
}
System.out.println("********显示区*********");
System.out.println();
while(j<5)
{
if(student[j].status==3)
{
System.out.println("所有三年级学生的姓名和id是:");
System.out.println(student[j].name+" "+student[j].id);
num++;
}
j++;
}
if(num==0) System.out.print("没有三年级的学生");
}
}
public static int id=0,status=0;
这2句有问题
static 数据成员是静态数据成员
对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷 贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共 用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新
所有你给id最后赋的值是1
那所有的student的id都是1
所有输出无
Student[] student=new Student[5];
你在For的外面实例化这个数组对象...
在for的内部不管你访问的下表是多少..都是指向时一个内存地址.....说白了....你把实例化这步..放到for里面......就OK了...
1, public static String name;
public static int id=0,status=0;
把static去掉吧,要不就是所有对象共享同一个数据,不会一个对象一个数据了。
2,Student[] student=new Student[5];
虽然声明了长度为5的Student数组,可是没有对数组进行初始化。
for(int m=0;m<5;m++){
student[m] = new Student();
}
以上两个问题改了就好了。
public static int id=0,status=0;
这里为什么要用static呢???
修改为
public String name;
public int id=0,status=0;